概览

本文记录了关于如何更好地应用Go风格指南的指导意见。该指导旨在解决经常出现的通用问题,但不一定适用于所有情况。在可能的情况下,我们讨论了多种替代方法,以及决定何时该用和何时不该用这些方法的考虑因素;以下几条总体原则总结了如何编写可读的 Go 代码。以下为具有可读性的代码旨在:

就权衡备选风格的一套原则达成一致 整理最终的 Go 编码风格 记录并提供 Go 编码惯用法的典型示例 记录各种风格决策的利弊 帮助减少在 Go 可读性 review 时的意外 帮助可读性导师使用一致的术语和指导

本文档无意于:

成为在可读性审查时的详尽的意见清单 列出所有的规则,期望每个人在任何时候都能记住并遵守 在语言特型和风格的使用上取代良好的判断力 为了消除风格差异,证明大规模的改变是合理的 不同 Go 程序员之间以及不同团队的代码库之间总会存在差异。然而,我们的代码库尽可能保持一致符合 Google 和 Alphabet 的最大利益。 (有关一致性的更多信息,请参阅 指南。)为此,您可以随意进行风格改进,但不需要挑剔你发现的每一个违反风格指南的行为。特别是,这些文档可能会随着时间的推移而改变,这不是导致现有代码库做出额外改动的理由; 使用最新的最佳实践编写新代码,并随着时间的推移解决上下文或者关联到的代码的问题就足够了。

重要的是要认识到风格问题本质上是个人的,并且总是带有特定的权衡。这些文档中的大部分指南都是主观的,但就像 gofmt 一样,它提供的一致性具有重要价值。 因此,风格建议不会在未经适当讨论的情况下改变,Google 的 Go 程序员被鼓励遵循风格指南,即使他们可能不同意。

定义

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

规范(Canonical)

制定规定性和持久性规则

在这些文档中,“规范”用于描述被认为是所有代码(旧的和新的)都应该遵循的标准,并且预计不会随着时间的推移而发生重大变化。规范文档中的原则应该被作者和审稿人理解,因此规范文档中包含的所有内容都必须达到高标准。 如此一来,与非规范文档相比,规范文档通常更短并且规定的风格元素更少。

标准(Normative)

旨在建立一致性

在这些文档中,“规范”用于描述 Go 代码审查者使用的一致同意的风格元素,以便建议、术语和理由保持一致。 这些元素可能会随着时间的推移而发生变化,本文涉及的这些文件将反映出这些变化,以便审阅者可以保持一致和及时更新。 Go 代码编写者不被要求熟悉此文档,但这些文档将经常被审阅者用作可读性审查的参考。

惯用写法(Idiomatic)

常见且熟悉

在这些文档中,“惯用写法”指在 Go 代码中普遍存在的东西,并已成为一种易于识别的常见写法。一般来说,如果两者在上下文中服务于相同的目的,那么惯用写法应该优先于非惯用写法,因为这将是读者最熟悉的写法。