跨越20年的对话:从 Eiffel 的“契约”到 Go 的“接口”

本文永久链接 – https://tonybai.com/2025/12/13/from-eiffel-contract-to-go-interface 大家好,我是Tony Bai。 20年前,当我第一次翻开 Bertrand Meyer 的那本巨著**《面向对象软件构造》(Object-Oriented Software Construction)** 时,一种醍醐灌顶的感觉油然而生。书中那个名为 Eiffel 的语言,以及它所倡导的 “契约式设计” (Design by Contract, DbC),仿佛为当时混乱的软件开发世界点亮了一盏明灯。 ...

December 13, 2025 · 10 min · Tony Bai

你的 Go 测试,还停留在“演员对台词”吗?

本文永久链接 – https://tonybai.com/2025/11/17/go-testing-journey 大家好,我是Tony Bai。 我想请大家想象一个场景: 周五下午五点,你刚刚修复了一个看似无关紧要的 bug,怀着对周末的憧憬,合并了你的代码。CI/CD 流水线一片绿灯,部署顺利完成。 ...

November 17, 2025 · 5 min · Tony Bai

Google I/O 2025 Go 语言进展:生产力、生产就绪与 AI 赋能

Google I/O 2025 Go 语言进展:生产力、生产就绪与 AI 赋能 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ ...

May 25, 2025 · 15 min · Tony Bai

深入GOCACHEPROG:Go构建缓存的自定义扩展

本文永久链接 – https://tonybai.com/2025/03/04/deep-dive-into-gocacheprog-custom-extensions-for-go-build-cache 背景 众所周知,Go build cache是在Go 1.10版本加入到Go工具链中的,缓存的主要目标是避免重复编译相同的代码,从而加快构建速度。 默认情况下,Go构建缓存位于用户主目录下的一个特定目录中,例如,Linux上通常是$HOME/.cache/go-build,Windows上是%LocalAppData%\go-build)。Mac上则是$HOME/Library/Caches/go-build。当然,Go开发者也可以通过GOCACHE环境变量自定义缓存位置。构建缓存的目录布局结构如下: ...

March 4, 2025 · 18 min · Tony Bai

Go团队:Go是什么

本文永久链接 – https://tonybai.com/2024/05/19/what-the-go-team-think-go-is 2024年的Google I/O大会如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心:Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro,然后面对OpenAI GPT-4o的挑衅,谷歌在大会上直接甩出大杀器Project Astra,视觉识别和语音交互效果,跟OpenAI的GPT-4o不相上下;接着,谷歌又祭出文生视频模型Veo硬刚Sora,效果酷炫,时长超过1分钟,打破Sora纪录。最后Google CEO劈柴宣布:谷歌搜索将被Gemini重塑,形态从此彻底改变!用户不再需要自己点进搜索结果,而是由多步骤推理的AI Overview来代办一切。 ...

May 19, 2024 · 9 min · Tony Bai

Go早期的那些布道者

本文永久链接 – https://tonybai.com/2024/05/17/the-early-evangelists-of-go Go自2009年开源至今已经快15年了!这期间,有很多人对Go语言的发展做出了重要贡献,起到了至关重要的作用,他们被视为Go语言的早期布道者和鼓吹者。他们向Go社区传达着Go的价值观、Go的最新发展、Go的使用方法以及最佳实践。 这些人有来自Go团队的,有来自Google但非Go团队的,也有Go的早期采纳者和贡献者。如今这些人的状况不尽相同。有些人依然在活跃在Go团队中,为Go的演进持续做着贡献;有些人由于各种原因,已经退居二线,但仍心系Go的发展;还有一些人则逐渐淡出Go社区,或者说不再复当年的那种热忱。 ...

May 17, 2024 · 16 min · Tony Bai

Go测试的20个实用建议

本文永久链接 – https://tonybai.com/2024/01/01/go-testing-by-example 2023年11月初,Go语言技术负责人Russ Cox在GopherCon Australia 2023大会上进行了题为“Go Testing By Example”的演讲: 12月初Russ Cox重新录制了该演讲内容的视频,并在个人网站上放了出来。这个演讲视频是关于如何编写好的Go测试的,Russ Cox介绍了20个实用建议,非常值得Go初学者甚至Go资深开发者学习并应用到实践中。这里是基于该视频整理的文字稿(可能并非逐字逐句),供广大Gopher参考。 ...

January 1, 2024 · 30 min · Tony Bai

一文搞懂Go subtest

注:本篇首图片基于lexica AI生成的图片二次加工而成。 本文永久链接 – https://tonybai.com/2023/03/15/an-intro-of-go-subtest 单元测试(unit testing)是软件开发中至关重要的一环,它存在的意义包括但不限于如下几个方面: 提高代码质量:单元测试可以确保代码的正确性、可靠性和稳定性,从而减少代码缺陷和bug。 减少回归测试成本:在修改代码时,单元测试可以快速检查是否影响了其他模块的功能,避免了整个系统的回归测试成本。 促进团队合作:单元测试可以帮助团队成员更好地理解和使用彼此编写的代码,提高代码的可读性和可维护性。 提高开发效率:单元测试可以自动化执行测试,减少手动测试的时间和工作量,从而提高开发效率。 Go语言设计者在Go设计伊始就决定语言特性与环境特性“两手都要抓,两手都要硬”,事实证明:Go的成功正是因为其对工程软件项目整体环境的专注。而Go内置轻量级测试框架这一点也正是Go重视环境特性的体现。并且,Go团队对这一内置测试框架的投入是持续的,不断有更便捷的、更灵活的新特性加入Go测试框架中,可以帮助Gopher更好地组织测试代码,更高效地执行测试等。 ...

March 15, 2023 · 9 min · Tony Bai

Go,13周年[译]

本文永久链接 – https://tonybai.com/2022/11/11/go-opensource-13-years 在中华大地的老百姓抱着手机进行双十一购物节狂欢,忙着支付尾款和秒杀的时候,Go核心团队的Russ Cox代表Go语言项目团队在Go官博上发表了《Thirteen Years of Go》的博文,纪念Go语言开源13周年,并对2021年以来Go语言的演进进行了归纳总结,对Go在其第14个年头将要做的改进也做了简单的说明。这里对博文做简单翻译,供大家参考。 ...

November 11, 2022 · 7 min · Tony Bai

让reviewdog支持gitlab-push-commit,守住代码质量下限

本文永久链接 – https://tonybai.com/2022/09/08/make-reviewdog-support-gitlab-push-commit-to-preserve-the-code-quality-floor 一. 代码质量保证的手段 从世界上首款计算机高级程序设计语言Fortran自上世纪50年代诞生以来,编程这个行当已经走过了近70年。虽然年头已不少,但不可否认的一点是:软件生产依然无法像硬件那样标准化,同一个小功能,N个程序员的有N种实现方法。 那么如何保证生产出的软件的质量符合我们的要求呢?不同领域的程序员都在进行着努力,比如:做编译器的让编译器更加严格,努力将内存安全问题彻底消除(如Rust);做工具链的为程序员提供了内置于语言的各种单测、集成测试、接口测试、fuzzing test等工具(如Go工具链),让程序员可以更容易地对自己所写的代码进行全方位的测试,以期找出更多的代码中的潜在问题… ...

September 8, 2022 · 14 min · Tony Bai