Go考古:创始人亲述Go语言的“创世纪”

本文永久链接 – https://tonybai.com/2025/07/03/meet-the-go-team-2012 大家好,我是Tony Bai。 2012 年,Google I/O 大会的舞台上,一个刚刚发布 1.0 版本的编程语言团队,正襟危坐。他们面对着全球开发者的审视和提问,这其中,就有三位图灵奖得主级别的传奇人物:Ken Thompson、Rob Pike 和 Robert Griesemer。 ...

July 3, 2025 · 6 min · Tony Bai

写出Go标准库级别文档注释的十个细节

写出Go标准库级别文档注释的十个细节 | Tony Bai Tony Bai一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ 关于我 文章列表 写出Go标准库级别文档注释的十个细节 十月 27, 2024 0 条评论 ...

October 27, 2024 · 6 min · Tony Bai

从零开始编程:Go语言真的适合新手吗?

从零开始编程:Go语言真的适合新手吗? | Tony Bai Tony Bai一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ 关于我 文章列表 从零开始编程:Go语言真的适合新手吗? 八月 22, 2024 0 条评论 ...

August 22, 2024 · 7 min · Tony Bai

Go语言编程指南翻译记:一本书,一支队伍,一段难忘的旅程

Go语言编程指南翻译记:一本书,一支队伍,一段难忘的旅程 | Tony Bai Tony Bai一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ 关于我 文章列表 Go语言编程指南翻译记:一本书,一支队伍,一段难忘的旅程 七月 5, 2024 2 条评论 ...

July 5, 2024 · 5 min · Tony Bai

一文告诉你哪些map element类型支持就地更新

本文永久链接 – https://tonybai.com/2023/04/02/map-element-types-support-in-place-update 年初,我代表团队和人民邮电出版社签订了翻译《Go Fundamentals》一书的合同,本月底便是四分之一进度的交稿时间点,近期闲时我们都在忙着做交叉review。 ...

April 2, 2023 · 9 min · Tony Bai

十分钟入门Go语言

本文永久链接 – https://tonybai.com/2023/02/23/learn-go-in-10-min 本文旨在带大家快速入门Go语言,期望小伙伴们在花费十分钟左右通读全文后能对Go语言有一个初步的认知,为后续进一步深入学习Go奠定基础。 ...

February 23, 2023 · 23 min · Tony Bai

Go类型系统:有何与众不同

本文永久链接 – https://tonybai.com/2022/12/18/go-type-system Go是一门强类型的静态编程语言。使用Go编程,我们的每一行代码几乎都离不开类型。因此,深入学习Go,我们首先要对Go的类型系统(type system)有一个全面和深入的认知。Go类型系统可以给予我们一个全局整体的视角,以帮助我们更好地学习和理解Go语言中那些具体的与类型相关的内容。 ...

December 18, 2022 · 8 min · Tony Bai

Go:方法集合中“消失的方法”

本文永久链接 – https://tonybai.com/2022/06/06/the-disappeared-method-in-method-set 在《Go语言第一课》中,我花了三节课对Go方法做了全面细致的讲解,而类型的方法集合是其中的一个重点,因为方法集合决定接口实现,并且课程还分门别类地对各种使用类型嵌入(type embedding)机制定义的类型进行了说明,讲解了这些类型的方法集合的组成规则。我还提供了一个可以输出某类型的方法集合的辅助函数,便于大家很直观地查看特定类型的方法集合。 ...

June 6, 2022 · 5 min · Tony Bai

为什么这个T类型实例无法调用*T类型的方法

本文永久链接 – https://tonybai.com/2022/02/27/go-addressable 近期在“Go语言第一课”专栏后台看到一位学员的一则留言,如下图: 由于有课程上下文,所以我这里将问题的上下文重新描述一下。 在专栏的第25讲,我们学习了Go语言提供的一个“语法糖”,比如下面这个例子: type T struct { a int } func (t T) M1() { t.a = 10 } func (t *T) M2() { t.a = 11 } func main() { var t1 T t1.M1() t1.M2() var t2 = &T{} t2.M1() t2.M2() } Go语言的类型有方法集合(method set)的概念,以上面例子来说,类型T的方法集合为{M1},而类型*T的方法集合为{M1, M2}。不过方法集合仅用于判断某类型是否实现某接口类型。当我们通过类型实例来调用方法时,Go会提供“语法糖”。上面这个例子先声明了类型T的变量t1,我们看到它不仅可以调用其方法集合中receiver参数类型为T的方法M1,它还可以直接调用不属于其方法集合的、receiver参数类型为*T的方法M2。T类型的实例t1之所以可以调用receiver参数类型为*T的方法M2都是Go编译器在背后自动进行转换的结果,即t1.M2()这种用法是Go提供的“语法糖”:Go判断t1的类型为T,与方法M2的receiver参数类型*T不一致后,会自动将t1.M2()转换为(&t1).M2()。 ...

February 27, 2022 · 6 min · Tony Bai

Go语言中常见的几种反模式[译]

本文翻译自Saif Sadiq的文章《Common anti-patterns in Go》。 众所周知,编码是一门艺术,就像每个拥有精湛艺术并为之感到骄傲的工匠一样,我们作为开发人员也为我们编写的代码感到自豪。为了获得最佳效果,艺术家不断寻找可提高其手艺的方法和工具。同样,作为开发人员,我们也在不断提高自己的技能,并对”如何写出好的代码”这个最重要的问题的答案保持好奇。 ...

March 31, 2021 · 9 min · Tony Bai