我正在尝试使用Visual Studio Code学习Go,并且我猜它正在使用Go linter。我创建了此结构以将JSON对象映射到其中。
type someAPI struct {
ApiEndpoint string `json:"apiEndpoint"`
ApiVersion string `json:"apiVersion"`
...
}
我收到这些警告...
结构字段ApiEndpoint应该是APIEndpoint
结构字段ApiVersion应该为APIVersion
我做了一些谷歌搜索,因此找不到关于结构字段名称的任何要求。我发现的最多的是,如果要公开一个字段,必须将其大写。
那么,这羽短绒棉为什么要警告我这些名字呢?
我通过将Api
更改为Abc
进行了一些测试,棉绒布也没有警告我将其更改为“ ABC”。因此,我必须假设它正在检查以“ Api”开头的名称。
字段名称的Go约定是什么?或者换句话说,我还应该了解其他约定吗?
答案 0 :(得分:6)
在大多数情况下,Go中的命名约定只是使用驼峰式大小写,如果是公共字段,则以大写开头,如果不是,则以小写开头。但是在缩写词(例如API或URL)中,它们以大写形式编写,例如。 http package上的func ProxyURL(fixedURL *url.URL)
。
编辑:我搜索了更多内容,Go Code Review Comments上有首字母缩写词的指南。在Initialisms部分中讨论缩写词:
名称中的缩写或缩写词(例如“ URL”或“ NATO”) 有一个一致的情况。例如,“ URL”应显示为“ URL”或 “ url”(如在“ urlPony”或“ URLPony”中),从不作为“ URL”。举个例子: ServeHTTP不是ServeHttp。对于具有多个已初始化的标识符 “单词”,例如使用“ xmlHTTPRequest”或“ XMLHTTPRequest”。
此规则在“标识符”的缩写时也适用于“ ID”,因此 输入“ appID”而不是“ appId”。
因此首字母缩略词的规则是它们应具有恒定的大小写。在您的情况下,因为它们必须以大写字母“ A”开头,所以应将它们写为“ API”。
这也是我个人的观点,我知道示例中的代码可能与您使用的代码不完全相同,但是如果是这样,我认为在字段名称中包含结构名称是一种不好的做法。您正在做api.APIField
,但是api.Field
更易于阅读,如果您知道对象是API,那么毫无疑问,该字段属于API。
答案 1 :(得分:3)
就像您的问题和@topo的答案中提到的那样,函数命名的变量约定为Camel Case(混合大小写)。如果名称以大写字母开头,则可以导出变量/函数。
包装始终是小写。
接口应以-er
您可以在effective go naming session
中阅读更多内容。 另一方面,Golint超越了Go的命名约定。有一些单词规则,您遇到的是其中一个规则。您可以在此处查看完整列表:https://github.com/golang/lint/blob/master/lint.go#L751