猿问

在 Go 中命名 Getter 的惯用方式

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

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

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

现在,这个建议似乎不一致,因为 stdlib 本身多次违反了这一点。

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

所以问题是指南中给出的建议是错误的还是这些方法命名错误并且会在未来版本中修复?


jeck猫
浏览 228回答 3
3回答

猛跑小猪

这些名称与 Go 的设计命名不一致。Go 的创造者之一 Rob Pike谈到了 OS 包中的名称:有不一致之处,但这是关键点。它应该是 Stdout 而不是 StdOut,因为该名称来自底层系统。同样,它是 Fprintf 而不是 FPrintf 或 FPrintF,因为这是一个非常熟悉的名字。这些名字是进入 Go 的,而不是在那里创建的,最初的上限是入场费。在 Go 的未来版本中不会更改这些名称。

皈依舞

[go-nuts] 函数名大小写不一致在我们真正弄清楚命名约定应该是什么之前,选择了很多全小写的名称。我们采用的规则(稍后可能值得重新审视)是 package osor中的入口点,syscall以 C 中的等价物命名,在开头只有一个大写,以避免需要决定内部大写在缩写中的位置,例如geteuid 或getwd或chdir。像 那样的名称Readdirnames是实际的单词,在某些时候可能值得重新审视。拉斯os:名称中的大小写不一致 #1187关于“ os”包中使用的函数的大小写是否有任何规则?仔细看,这听起来不是很容易回想是否应该调用给定的函数LikeThat或 Likethat.例如:MkdirMkdirAllTempDirGetenvForkExecReadlinkReadAtReaddir感觉很特别,很难回想起来。这是一个已知问题。这是计划外的。

桃花长相依

术语“getter”指的是结构上的方法,这些方法允许您读取该结构上(通常是未导出的)字段的值。您指向的函数是顶级函数,允许您从 OS读取值。该惯用规则与本案无关。
随时随地看视频慕课网APP

相关分类

Go
我要回答