我正在尝试使用Visual Studio Code学习Go,我猜它正在使用Go linter.我创建了这个结构来将JSON对象映射到.
type someAPI struct {
ApiEndpoint string `json:"apiEndpoint"`
ApiVersion string `json:"apiVersion"`
...
}
Run Code Online (Sandbox Code Playgroud)
我得到了这些警告......
struct field ApiEndpoint应该是APIEndpoint
struct field ApiVersion应该是APIVersion
我做了一些谷歌搜索,我找不到任何关于结构字段名称的要求.我发现的最多的是,如果你想让一个领域公开,你必须把它资本化.
那么为什么这个linter警告我这些名字?
我做了一些测试,改为Api,Abc而且linter没有警告我把它改成"ABC".所以我必须假设它正在检查以"Api"开头的名字.
字段名称的Go约定是什么?或者换句话说,还有其他我应该了解的约定吗?
对于大多数情况,Go中的命名约定只是使用驼峰大小写,如果是公共字段则以大写字母开头,如果不是,则以小写字母开头.但是在像API或URL这样的缩写词中,它们是以完整的大写形式编写的,例如.func ProxyURL(fixedURL *url.URL)在http包上.
编辑:我搜索了一点,并在Go Code Review评论中有关于首字母缩略词的指南.它讨论了Initialisms部分中的首字母缩略词:
名称中的单词是首字母或首字母缩略词(例如"URL"或"NATO")具有一致的大小写.例如,"URL"应显示为"URL"或"url"(如"urlPony"或"URLPony"),而不是"Url".举个例子:ServeHTTP不是ServeHttp.对于具有多个初始化"单词"的标识符,使用例如"xmlHTTPRequest"或"XMLHTTPRequest".
当"ID"是"标识符"的缩写时,此规则也适用于"ID",因此请写"appID"而不是"appId".
所以缩略语的规则是他们应该有不变的情况.在您的情况下,因为它们必须以大写"A"开头,您应该将它们写为"API".
这也只是我个人的意见,我知道示例中的代码可能不是您正在使用的确切代码,但如果是,我认为在字段名称中包含结构名称是一种不好的做法.您正在做api.APIField但api.Field更容易阅读,如果您知道该对象是API,那么毫无疑问该字段属于API.
就像在您的问题和@topo 的回答中提到的那样,函数命名变量的约定是 Camel Case(混合大写)。如果名称以大写字母开头,则可以导出变量/函数。
包总是小写的。
接口应该以 -er
您可以在有效的 go 命名会话中阅读更多内容
另一方面,Golint 超越了 Go 的命名约定。单词有一些规则,在您的情况下,您正在遵守其中一项规则。您可以在此处查看完整列表:https : //github.com/golang/lint/blob/master/lint.go#L751