什么是Golang结构域命名约定?

时间:2018-09-16 20:47:24

标签: go

我正在尝试使用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约定是什么?或者换句话说,我还应该了解其他约定吗?

2 个答案:

答案 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