Skip to Content
Go概述

Go 风格

https://google.github.io/styleguide/go 

概述 | 指南 | 决策 | 最佳实践

关于

Go 风格指南及其配套文档整理了当前编写可读、符合惯例的 Go 代码的最佳方法。遵循风格指南并不是绝对要求,这些文档也永远不会面面俱到。我们的目的是尽量减少编写可读 Go 代码时的猜测工作,以便语言新手能够避免常见错误。风格指南也有助于统一在 Google 审查 Go 代码时给出的风格指导。

文档链接主要受众规范性权威性
风格指南https://google.github.io/styleguide/go/guide 所有人
风格决策https://google.github.io/styleguide/go/decisions 可读性审查导师
最佳实践https://google.github.io/styleguide/go/best-practices 感兴趣的人

文档

  1. 风格指南  概述了 Google Go 风格的基础。本文档是权威性的,是风格决策和最佳实践中建议的基础。

  2. 风格决策  是一份更为详细的文档,总结了特定风格要点的决策,并在适当时讨论了决策背后的原因。

    这些决策可能会随着新数据、新语言特性、新库或新兴模式的出现而偶尔变化,但不期望 Google 的每个 Go 程序员都要跟上这份文档的最新内容。

  3. 最佳实践  记录了一些随着时间推移而形成的模式,这些模式解决了常见问题,具有良好的可读性,并且对代码维护需求具有鲁棒性。

    这些最佳实践不是权威性的,但鼓励 Google 的 Go 程序员在可能的情况下使用它们,以保持代码库的统一性和一致性。

这些文档旨在:

  • 就权衡备选风格达成一组原则
  • 整理已确定的 Go 风格事项
  • 记录并提供 Go 惯用法的权威示例
  • 记录各种风格决策的利弊
  • 帮助减少 Go 可读性审查中的意外情况
  • 帮助可读性审查导师使用一致的术语和指导

这些文档旨在:

  • 列出可读性审查中可以给出的所有评论的详尽清单
  • 列出所有人都应随时记住并遵守的所有规则
  • 取代在使用语言特性和风格方面的良好判断
  • 以消除风格差异为由进行大规模更改

不同的 Go 程序员之间以及不同团队的代码库之间总会存在差异。然而,保持我们的代码库尽可能一致符合 Google 和 Alphabet 的最佳利益。(有关一致性的更多信息,请参见指南。)为此,请随时进行您认为合适的风格改进,但您不需要对发现的每一个违反风格指南的地方吹毛求疵。特别是,这些文档可能会随时间变化,这不是在现有代码库中造成额外变动的理由;使用最新的最佳实践编写新代码并在适当时处理附近的问题就足够了。

重要的是要认识到,风格问题本质上是个人化的,总是存在固有的权衡。这些文档中的许多指导是主观的,但就像 gofmt 一样,它们提供的统一性具有重大价值。因此,在没有充分讨论的情况下不会更改风格建议,即使 Google 的 Go 程序员可能不同意某些建议,也鼓励遵循风格指南。

定义

以下在风格文档中使用的词语定义如下:

  • 权威性(Canonical):建立规范性和持久性的规则

    在这些文档中,“权威性”用于描述被认为是所有代码(新旧代码)都应遵循的标准,且预计不会随时间发生重大变化。权威性文档中的原则应被作者和审查者同样理解,因此权威性文档中包含的所有内容必须达到很高的标准。因此,权威性文档通常比非权威性文档更短,规定的风格元素更少。

    https://google.github.io/styleguide/go#canonical 

  • 规范性(Normative):旨在建立一致性

    在这些文档中,“规范性”用于描述 Go 代码审查者使用的约定风格元素,以便建议、术语和理由保持一致。这些元素可能会随时间变化,这些文档将反映这些变化,以便审查者能够保持一致和最新。Go 代码的作者不需要熟悉规范性文档,但审查者在可读性审查中会经常使用这些文档作为参考。

    https://google.github.io/styleguide/go#normative 

  • 惯用的(Idiomatic):常见且熟悉的

    在这些文档中,“惯用的”用于指代 Go 代码中普遍存在的、已成为易于识别的熟悉模式。一般来说,如果惯用模式和非惯用模式在上下文中都能达到相同目的,应优先选择惯用模式,因为这对读者来说最为熟悉。

    https://google.github.io/styleguide/go#idiomatic 

补充参考

本指南假设读者熟悉 Effective Go ,因为它为整个 Go 社区的 Go 代码提供了共同的基准。

以下是一些额外资源,供希望自学 Go 风格的人以及希望在审查中提供更多可链接上下文的审查者使用。Go 可读性流程的参与者不需要熟悉这些资源,但它们可能会在可读性审查中作为上下文出现。

外部参考

相关 Testing-on-the-Toilet 文章

其他外部著作

Last updated on