何时在Go中的变量名中使用前导下划线
在变量名中引入何时在Go中的变量名中使用前导下划线,go,naming-conventions,Go,Naming Conventions,在变量名中引入有什么特殊用途吗 例如: func(_m*MockTracker). 从 在命名转换中,似乎没有关于变量名中的u的内容。 从此处开始:在以下列表中,标识符名称中的前导下划线没有定义特殊含义: 标识符 标识符命名程序实体,如变量和类型。一 标识符是一个或多个字母和数字的序列。第一 标识符中的字符必须是字母 identifier=字母{letter | unicode_digit}。 a _x9 ThisVariableIsExported αβ 您的示例是从代码生成的 在您链接
有什么特殊用途吗
例如:
func(_m*MockTracker).
从 在命名转换中,似乎没有关于变量名中的u的内容。
从此处开始:在以下列表中,标识符名称中的前导下划线没有定义特殊含义: 标识符 标识符命名程序实体,如变量和类型。一 标识符是一个或多个字母和数字的序列。第一 标识符中的字符必须是字母
identifier=字母{letter | unicode_digit}。
a
_x9
ThisVariableIsExported
αβ
您的示例是从代码生成的
在您链接的包中,您将看到以下内容:
// Recorder for MockTracker (not exported)
type _MockTrackerRecorder struct {
mock *MockTracker
}
mockgen包中的sanitize函数在包名称前加了一个下划线,似乎是为了保持一致性,并确保标识符名称保持私有(即不导出,因为它们以大写字母开头)。但它不是Go规范中定义的东西
// sanitize cleans up a string to make a suitable package name.
func sanitize(s string) string {
t := ""
for _, r := range s {
if t == "" {
if unicode.IsLetter(r) || r == '_' {
t += string(r)
continue
}
} else {
if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' {
t += string(r)
continue
}
}
t += "_"
}
if t == "_" {
t = "x"
}
return t
}
没有特别的意义,但不要自己做。这不是惯用语。