https://ggdocs.cn/styleguide/go
Go 风格指南及相关文档旨在整理出编写可读且符合 Go 语言习惯的最佳方法。遵循风格指南并非强制性的,并且这些文档永远无法穷尽所有情况。我们的目的是尽量减少编写可读 Go 代码时的猜测,以便 Go 语言的新手可以避免常见的错误。风格指南还有助于统一在 Google 内部进行 Go 代码审查时提供的风格指导。
文档 | 链接 | 主要受众 | 规范性 | 权威性 |
---|---|---|---|---|
风格指南 | https://ggdocs.cn/styleguide/go/guide | 所有人 | 是 | 是 |
风格决策 | https://ggdocs.cn/styleguide/go/decisions | 可读性导师 | 是 | 否 |
最佳实践 | https://ggdocs.cn/styleguide/go/best-practices | 任何感兴趣的人 | 否 | 否 |
风格指南 概述了 Google 的 Go 语言风格的基础。该文档具有权威性,是“风格决策”和“最佳实践”中的建议的基础。
风格决策 是一个更详细的文档,总结了关于特定风格点的决策,并在适当的情况下讨论了决策背后的原因。
这些决策可能会根据新数据、新的语言特性、新的库或新兴模式而偶尔发生变化,但不期望 Google 的单个 Go 程序员及时了解此文档。
最佳实践 记录了一些随着时间的推移而形成的模式,这些模式可以解决常见问题,具有良好的可读性,并且能够应对代码维护需求。
这些最佳实践并非权威性的,但鼓励 Google 的 Go 程序员尽可能使用它们,以保持代码库的统一性和一致性。
这些文档旨在
这些文档不旨在
Go 程序员之间以及一个团队的代码库与另一个团队的代码库之间总是存在差异。但是,尽可能使我们的代码库保持一致符合 Google 和 Alphabet 的最大利益。(有关一致性的更多信息,请参见指南。)为此,您可以随意进行风格改进,但无需吹毛求疵地纠正您发现的每一个违反风格指南的行为。特别是,这些文档可能会随着时间的推移而发生变化,但这并不是导致现有代码库额外变动的原因;使用最新的最佳实践编写新代码并在一段时间内解决附近的问题就足够了。
重要的是要认识到风格问题本质上是个人化的,并且总是存在固有的权衡。这些文档中的大部分指导都是主观的,但就像gofmt
一样,它们提供的一致性具有重要价值。因此,如果没有经过适当的讨论,风格建议将不会被更改,即使 Google 的 Go 程序员可能不同意,也鼓励他们遵循风格指南。
以下词语在整个风格文档中使用,定义如下
在这些文档中,“权威性”用于描述被认为是所有代码(旧的和新的)都应该遵循的标准,并且预计不会随着时间的推移而发生重大变化。权威性文档中的原则应该被作者和审查者理解,因此权威性文档中包含的所有内容都必须满足很高的标准。因此,权威性文档通常比非权威性文档更短,并且规定的风格要素更少。
https://ggdocs.cn/styleguide/go#canonical
在这些文档中,“规范性”用于描述 Go 代码审查者使用的、达成一致的风格要素,以便建议、术语和理由保持一致。这些要素可能会随着时间的推移而发生变化,并且这些文档将反映此类变化,以便审查者可以保持一致性和最新性。不期望 Go 代码的作者熟悉规范性文档,但在可读性审查中,审查者会经常将这些文档用作参考。
https://ggdocs.cn/styleguide/go#normative
在这些文档中,“惯用语”用于指 Go 代码中普遍存在的事物,并且已成为易于识别的熟悉模式。一般来说,如果惯用语模式和非惯用语模式在上下文中具有相同的用途,则应首选惯用语模式,因为这是读者最熟悉的。
https://ggdocs.cn/styleguide/go#idiomatic
本指南假定读者熟悉 Effective Go,因为它为整个 Go 社区的 Go 代码提供了通用的基准。
以下是一些额外的资源,供那些希望自学 Go 风格的人以及希望在其审查中提供更多可链接上下文的审查者使用。Go 可读性流程的参与者不必熟悉这些资源,但它们可能会作为可读性审查中的上下文出现。
外部参考资料
相关的 Testing-on-the-Toilet 文章
其他外部文章