一个好名字的另一个属性是它应该是可预测的。 在第一次遇到该名字时读者就能够理解名字的使用。 当他们遇到常见的名字时,他们应该能够认为自从他们上次看到它以来它没有改变意义。
例如,如果您的代码在处理数据库请确保每次出现参数时,它都具有相同的名称。 与其使用 d * sql.DB
,dbase * sql.DB
,DB * sql.DB
和 database * sql.DB
的组合,倒不如统一使用:
db *sql.DB
这样做使读者更为熟悉; 如果你看到db
,你知道它就是 *sql.DB
并且它已经在本地声明或者由调用者为你提供。
类似地,对于方法接收器: 在该类型的每个方法上使用相同的接收者名称。 在这种类型的方法内部可以使读者更容易使用。
注意:
Go 语言中的短接收者名称惯例与目前提供的建议不一致。 这只是早期做出的选择之一,已经成为首选的风格,就像使用CamelCase
而不是snake_case
一样。
贴士:
Go 语言样式规定接收器具有单个字母名称或从其类型派生的首字母缩略词。 你可能会发现接收器的名称有时会与方法中参数的名称冲突。 在这种情况下,请考虑将参数名称命名稍长,并且不要忘记一致地使用此新参数名称。
最后,某些单字母变量传统上与循环和计数相关联。 例如,i
,j
和 k
通常是简单 for
循环的循环归纳变量。n
通常与计数器或累加器相关联。v
是通用编码函数中值的常用简写,k
通常用于 map
的键,s
通常用作字符串类型参数的简写。
与上面的 db
示例一样,程序员认为 i
是一个循环归纳变量。 如果确保 i
始终是循环变量,而且不在 for
循环之外的其他地方中使用。 当读者遇到一个名为 i
或 j
的变量时,他们知道循环就在附近。
贴士:
如果你发现自己有如此多的嵌套循环,i
,j
和k
变量都无法满足时,这个时候可能就是需要将函数分解成更小的函数。