Tip #36 以下划线(_)作为前缀,命名非导出的全局变量
原始链接:Golang Tip #36: Naming Unexported Global Variables with an Underscore (_) Prefix.
(注:此命名规则在Go社区并没有被普遍认可为惯用做法,而是受到Uber编码风格指南的启发)
在Go语言中,声明在顶层的变量和常量可以在它们所属的整个包中被访问。
常规命名方式有何不妥?
如果没有明确的命名约定,我们很容易在更小的作用域内无意中覆盖这些包级别的变量。
设想一下,一个命名为 dataSize 的局部变量可能会覆盖同名的全局变量。
但如果它们的命名不同,还会有什么问题呢?”
尽管这个例子看似简单,但它却引发了一个问题:我们如何知道 maxUsers 变量的来源?
- 它是一个像 'limit' 这样的局部变量?
- 还是函数的一个参数?
- 或者是来自全局作用域?
在更复杂的场景中,我们可能不得不四处搜索或使用IDE的快捷键(如cmd + click)来查找并跳转到变量的定义。这个过程可能会分散我们的注意力并打断我们的工作流程。
使用下划线前缀
通过在全局变量前添加下划线 (_),可以明确表示这些标识符是全局的:
这种明确的标识使得“_maxUsers”被一眼识别为全局变量,大大降低了我们无意中覆盖或修改它的风险。