
编
码
规
范
G o o g l e G o
编
程
规
范
让
G o p h e r
从
这
⾥
开
始
G o C N
翻
译
⼩
组

Fivezh 朱亚光
Xiaomin
Zheng
784909593 刘思家 Sijing233
⼩超⼈ Yu ZHANG
Google Go 编程规范
《Google Go 编程规范》采⽤ Hugo 发布。欢迎⼤家通过 issue 提供建议,也可以通过 pull requests 来共同参与
贡献。
安装完 hugo 之后,需要先同步主题⽂件
同步完成后,可在根⽬录执⾏以下指令来测试⽹站:
⽂档在 content/zh/docs ⽬录下,修改后可以通过 pull requests 提交。
⽬录
1. 概述
2. ⻛格指南
3. ⻛格决策
4. 最佳实践
授权
The articles in 《Google Go 编程规范》 are licensed under a Creative Commons Attribution-ShareAlike 4.0
International License.
贡献者
!
git submodule update --init --recursive
hugo server

概述
原⽂:https://google.github.io/styleguide/go
概述 | ⻛格指南 | ⻛格决策 | 最佳实践
关于
本系列的 Go ⻛格指南和相关⽂档整理了当前,最佳的⼀个编写易读和惯⽤⽅式的 Go 写法。 遵守⻛格指南
并不是绝对的,这份⽂件也永远不会详尽⽆遗。我们的⽬的是尽量减少编写可读 Go 代码的猜测,以便该语
⾔的新⼿可以避免常⻅的错误。此⻛格指南也⽤于统⼀ Google 内 Go 代码 review 者的⻛格指南。
⽂档 链接 主要受众 视为标准
(Normative)
视为规范
(Canonical)
⻛格指南 https://
gocn.github.io/
styleguide/docs/
02-guide/
所有⼈ Yes Yes
⻛格决策 https://
gocn.github.io/
styleguide/docs/
03-decisions/
可读性导师 Yes No
最佳实践 https://
gocn.github.io/
styleguide/docs/
04-best-
practices/
任何有兴趣的⼈ No No
⽂档说明
⻛格指南 (Style Guide) (https://gocn.github.io/styleguide/docs/02-guide/) 概述了 Google Go ⻛格
的基础。本⽂档为定义名词性质的⽂件,⽤作⻛格决策和最佳实践中建议的基础。
⻛格决策 (Style Decisions) (https://gocn.github.io/styleguide/docs/03-decisions/) 是⼀份更详细的
⽂档,它总结了特定场景下⻛格的决策理由,并在适当的时候讨论了决策背后的原因。
这些决定可能偶尔会根据新数据、新语⾔特性、新代码库或新出现的模式⽽改变,但不期望 Google 的
Go 程序员能及时了解本⽂档的更新。
最佳实践 (Best Practices) (https://gocn.github.io/styleguide/docs/04-best-practices/) 描述了⼀些
随时间演变的模式,这些模式可以解决通⽤问题,可读性强,并且对代码可维护的需要有很好的健壮
性。
这些最佳实践并不规范,但⿎励 Google 的 Go 程序员尽可能使⽤它们,以保持代码库的统⼀和⼀致。
这些⽂件旨在:
就权衡备选⻛格的⼀套原则达成⼀致
整理最终的 Go 编码⻛格

记录并提供 Go 编码惯⽤法的典型示例
记录各种⻛格决策的利弊
帮助减少在 Go 可读性 review 时的意外
帮助可读性导师使⽤⼀致的术语和指导
本⽂档⽆意于:
成为在可读性审查时的详尽的意⻅清单
列出所有的规则,期望每个⼈在任何时候都能记住并遵守
在语⾔特型和⻛格的使⽤上取代良好的判断⼒
为了消除⻛格差异,证明⼤规模的改变是合理的
不同 Go 程序员之间以及不同团队的代码库之间总会存在差异。然⽽,我们的代码库尽可能保持⼀致符合
Google 和 Alphabet 的最⼤利益。 (有关⼀致性的更多信息,请参阅 指南。)为此,您可以随意进⾏⻛格
改进,但不需要挑剔你发现的每⼀个违反⻛格指南的⾏为。特别是,这些⽂档可能会随着时间的推移⽽改
变,这不是导致现有代码库做出额外改动的理由; 使⽤最新的最佳实践编写新代码,并随着时间的推移解决
上下⽂或者关联到的代码的问题就⾜够了。
重要的是要认识到⻛格问题本质上是个⼈的,并且总是带有特定的权衡。这些⽂档中的⼤部分指南都是主观
的,但就像 gofmt ⼀样,它提供的⼀致性具有重要价值。 因此,⻛格建议不会在未经适当讨论的情况下改
变,Google 的 Go 程序员被⿎励遵循⻛格指南,即使他们可能不同意。
定义
⻛格⽂档中使⽤的以下词语定义如下:
规范 (Canonical)
制定规定性和持久性规则
在这些⽂档中,“规范”⽤于描述被认为是所有代码(旧的和新的)都应该遵循的标准,并且预计不会随
着时间的推移⽽发⽣重⼤变化。规范⽂档中的原则应该被作者和审稿⼈理解,因此规范⽂档中包含的所
有内容都必须达到⾼标准。 如此⼀来,与⾮规范⽂档相⽐,规范⽂档通常更短并且规定的⻛格元素更
少。
标准 (Normative)
旨在建⽴⼀致性
在这些⽂档中,“规范”⽤于描述 Go 代码审查者使⽤的⼀致同意的⻛格元素,以便建议、术语和理由保
持⼀致。 这些元素可能会随着时间的推移⽽发⽣变化,本⽂涉及的这些⽂件将反映出这些变化,以便审
阅者可以保持⼀致和及时更新。 Go 代码编写者不被要求熟悉此⽂档,但这些⽂档将经常被审阅者⽤作
可读性审查的参考。
惯⽤写法 (Idiomatic)
常⻅且熟悉
在这些⽂档中,“惯⽤写法”指在 Go 代码中普遍存在的东⻄,并已成为⼀种易于识别的常⻅写法。⼀般
来说,如果两者在上下⽂中服务于相同的⽬的,那么惯⽤写法应该优先于⾮惯⽤写法,因为这将是读者
最熟悉的写法。

附加参考
本指南假定读者熟悉 Effective Go,因为它为整个 Go 社区的 Go 代码提供了⼀个通⽤基线。
下⾯是⼀些额外的资源,供那些希望⾃学 Go ⻛格的⼈和希望在他们的评审中附上可链接的评审依据的代码
审阅者。 不期望 Go 可读性过程的参与者熟悉这些资源,但它们可能作为可读性审阅的相关依据出现。
外部参考
Go 语⾔规范
Go FAQ
Go 内存模型
Go 数据结构
Go 接⼝
Go 谚语
Go 技巧 - 敬请期待
⻢桶测试 (Testing-on-the-Toilet) 相关⽂档
厕所⾥的测试(⼜称 TotT)是测试⼩组最明显的成就。从 2006年开始,TotT 从⼀个会议上的玩笑开始,
已经成为⼀个真正的⾕歌机构,并且是在公司内部传播想法、产⽣讨论和推动新的内部⼯具采⽤的最有效
的⽅式之⼀。TotT
TotT: 标识命令
TotT: 测试状态与 vs Testing Interactions
TotT: 有效测试
TotT: ⻛险驱动测试
TotT: 变化检测器测试被认为是有害的
额外的外部⽂档
Go 与 教条
少即是成倍的多
Esmerelda 的想象⼒
⽤于解析的正则表达式
Gofmt 的⻛格没有⼈喜欢,但 Gofmt 却是每个⼈的最爱 (YouTube)