Go中对常量的命名约定

198

我正在尝试确定Golang中const的命名规范。

个人而言,我倾向于遵循C风格并使用大写字母书写,但我在这个页面(http://golang.org/doc/effective_go.html)中没有找到任何列出该语言命名惯例的内容。


16
我很想使用“FOO_BAR_BAZ”这种风格来书写常量,以便提高可读性,但不幸的是这会影响常量的可见性,而且这种方式也并不常见。我只能咽下自己的骄傲,接受通常的约定,即使我并不喜欢它。 - byxor
3个回答

215
标准库使用驼峰式命名,建议您也这样做。第一个字母大写或小写取决于您是否想导出常量。
一些示例:
- md5.BlockSize - os.O_RDONLY是一个例外,因为它直接从POSIX借来的。 - os.PathSeparator

24
确定是否希望将 const 元素暴露给其他包很重要。如果使用 UpperCamelCaseALL_CAPS,则会将其导出到包外。因此,我在私有常量变量中坚持使用 lowerCamelCase,我记得从与 Go 项目相关的某个人那里读到过这个建议(或者甚至是在官方文档中——我忘记在哪里看到的)。 - weberc2
4
是帕斯卡命名法(Pascal Case)。 - Mirza
3
我同意这是Go中正确的方式,但在两个单词大写且不允许使用下划线的情况下,它使阅读变得更加困难,例如HTTPID而不是HTTP_ID。我的代码中有LED_ALED_B等,现在必须更改为LEDALEDB等以遵循惯例并避免lint报错。我认为后者不太易读,特别是当您连接两个较长的缩写词时。 - Bjorn
1
我第一次听说“Upper Camel Case”,但它可能比“Pascal Case”更好,后者是VariablesLikeThis的历史名称。 - Rick O'Shea
@Bjorn 如果你想要导出,可以使用帕斯卡命名法;如果你想保持私有,则可以使用驼峰命名法。这样会使代码更易读。 LedA // 导出 ledA // 私有 - Nilesh Kesar
2
@NileshKesar,是的,我认为这更清晰,也是我会这样做的。虽然我没有特别提到它,但我指的是谷歌的风格,他们也有一个代码检查器:https://github.com/golang/go/wiki/CodeReviewComments#initialisms。根据这个,应该是LEDA LEDB。但当然你可以采用自己的风格,就像你建议的那样。我只是想坚持一个已经确立的风格。 - Bjorn

98

前往Go代码审查意见

该页面收集了在Go代码审查中经常提出的一些常见意见,以便可以通过简写引用单个详细的解释。这是一个常见错误的清单,而不是样式指南。

您可以将其视为http://golang.org/doc/effective_go.html的补充。

混合大小写

请参阅http://golang.org/doc/effective_go.html#mixed-caps。即使这违反了其他语言的约定,也适用。例如,未公开的常量是maxLength而不是MaxLength或MAX_LENGTH。


Effective Go(《Go 语言编程》)

MixedCaps(驼峰式命名法)

最后,Go 语言中的惯例是使用 MixedCaps 或 mixedCaps 而不是下划线来编写多个单词的名称。


Go编程语言规范

导出标识符

为了允许从另一个包中访问标识符,可以将其导出。如果一个标识符同时满足以下两个条件,则它是导出的:

  • 标识符名称的第一个字符是 Unicode 大写字母(Unicode 类 "Lu");

  • 该标识符在包块中声明,或者是字段名或方法名。

所有其他标识符都不是导出的。


使用混合大小写。

32

具体的例子。注意,对于常量(如果相关),在声明类型时指定类型有助于编译器。

// Only visible to the local file
const localFileConstant string = "Constant Value with limited scope"

// Exportable constant
const GlobalConstant string = "Everyone can use this"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接