gpt4 book ai didi

跨包的 golang 变量命名约定

转载 作者:数据小太阳 更新时间:2023-10-29 03:02:59 34 4
gpt4 key购买 nike

最近开始研究go-ethereum,第一次使用golang。 C++ 是我的主要语言,由于 go-ethereum 项目中的变量名称,我有点困惑。

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

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

state包中同时存在account和account两种类型,看起来很奇怪。

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

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

这些命名方式在 golang 中是约定俗成且流行的吗?如果您对 golang 中的命名约定有任何好的引用资料(例如开源项目或书籍),您能说出其中的一些吗?将不胜感激。

最佳答案

There are both "account" and "Account" types in state package, which seems weird.

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

来自Go Language Specification :

An identifier may be exported to permit access to it from another package. An identifier is exported if both:

  1. the first character of the identifier's name is a Unicode upper case letter (Unicode class "Lu"); and
  2. the identifier is declared in the package block or it is a field name or method name.

All other identifiers are not exported.

所以,仔细看看 go-ethereum 代码库,这是我的观察结果:

我认为当您查看 the generated documentation 时,实现选择更有意义.

特别是 Account type is front and center ,详细说明包的使用者感兴趣的数据结构。

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


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

关于跨包的 golang 变量命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939125/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com