跨包的golang变量命名约定

时间:2018-06-20 01:57:16

标签: go naming-conventions

最近我开始学习以太坊,这是我第一次使用golang。 C ++是我的主要语言,但由于以太坊项目中的变量名称而使我有些困惑。

core / state / managed_state.go:25:type帐户结构{

core / state / state_object.go:98:type帐户结构{

状态包中同时存在“帐户”和“帐户”类型,这看起来很奇怪。

我检查了Naming convention for similar Golang variables,它看起来仍然很糟糕。

我发现他们在不同的程序包中使用了很多“ Node”结构。当然,它们确实具有不同的目的和结构。

这类命名在golang中是惯例并且很流行吗? 如果您对golang中的命名约定有充分的参考(例如,开源项目或书籍),请为其中的一些命名?会非常感激。

1 个答案:

答案 0 :(得分:2)

  

状态包中同时存在“帐户”和“帐户”类型,这看起来很奇怪。

在语言规范中,这两个名称之间存在有意义的区别。

来自Go Language Specification

  

可以导出一个标识符以允许从另一个标识符访问它   包。如果同时满足以下条件,则导出标识符:

     
      
  1. 标识符名称的第一个字符是Unicode大写   字母(Unicode类“ Lu”);和
  2.   
  3. 标识符在   包块,或者它是字段名称或方法名称。
  4.   
     

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

因此,仔细看一下以太坊代码库,这是我的观察结果:

当您查看the generated documentation时,我认为实现选择更为合理。

特别是Account type is front and center,详细介绍了包装使用者所感兴趣的数据结构。

当您查看the documentation for the ManageState struct时,有意未记录未导出的字段。这是因为它们是内部细节,不会影响导出的界面,并且可以轻松更改而不会影响软件包的用户。


关于命名建议,请参见Names section in Effective Go