在Go中命名Getters的惯用方法

时间:2015-11-22 17:22:09

标签: go

Effective go有关于getter命名的以下建议:

  

Go并不为getter和setter提供自动支持。有' S   自己提供吸气剂和制定者并没有错,而且它也是如此   通常适合这样做,但它既不是惯用的,也不是必需的   将Get放入getter的名字。如果您有一个名为owner的字段   (小写,未导出),getter方法应该称为Owner   (大写,导出),而不是GetOwner。使用大写名称   export提供了用于区分字段和方法的钩子。一个   如果需要,setter函数可能会被称为SetOwner。两个名字   在实践中读得很好:

来源:https://golang.org/doc/effective_go.html#Getters

现在,这个建议似乎并不一致,因为stdlib本身多次违反了这个建议。 enter image description here

正如您在上面的屏幕截图中看到的,有多种方法使用GetX命名约定,这在有效的指南中是建议的。

所以问题是指南中给出的建议是错误的,或者这些方法被错误地命名为&在将来的版本中会修复吗?

3 个答案:

答案 0 :(得分:4)

这些名称与Go命名设计不一致。作为Go创作者之一的Rob Pike says this about the names in the OS package

  

存在不一致之处,但这是关键点。它应该是Stdout而不是StdOut,因为该名称来自底层系统。同样,它的Fprintf不是FPrintf或FPrintF,因为这是一个非常熟悉的名称。这些名字是Go,而不是在那里创建,最初的上限是入场费。

在Go的未来版本中不会更改名称。

答案 1 :(得分:2)

术语“getters”是指 structs 上的方法,它们允许您读取该结构上(通常未导出的)字段的值。您指向的功能是顶级函数,它允许您从OS 中读取值。这个惯用法则与此案无关。

答案 2 :(得分:1)

  

[go-nuts] FunctionName caseinconsistencies

     

我们真的选择了许多全部小写名称   弄清楚命名惯例应该是什么。我们的规则   后来可能值得重新考虑的是入门点   在包ossyscall中,它们以C中的等价物命名   在开始时有一个单一的资本,以避免需要决定   内部大写字母缩写为geteuid的缩写   或getwdchdir。像Readdirnames这样的名字,它们是实际的单词,   可能值得重新审视。

     

拉​​斯

  

os: inconsistent casing in names #1187

     

是否存在关于使用的函数大小的任何规则   “os”套餐?仔细观察,听起来不是很容易   回想一下给定的函数是否应该被称为LikeThat或   Likethat

     

例如:

Mkdir
MkdirAll
TempDir
Getenv
ForkExec
Readlink
ReadAt
Readdir
     

感觉非常特别,很难回想起来。

这是一个已知问题。这是无计划的。