代码之家  ›  专栏  ›  技术社区  ›  Jerinaw

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

go
  •  0
  • Jerinaw  · 技术社区  · 6 年前

    我正在尝试学习围棋,使用visualstudio代码,我猜它使用的是围棋linter。我创建这个结构是为了将JSON对象映射到。

    type someAPI struct {
        ApiEndpoint string   `json:"apiEndpoint"`
        ApiVersion  string   `json:"apiVersion"`
        ...
    }
    

    结构字段ApiVersion应为ApiVersion

    我做了一些谷歌搜索,我找不到任何关于这个结构域名称的要求。我发现的最多的一点是,如果你想公开一个字段,你必须把它大写。

    那为什么这个林特要警告我这些名字?

    我做了一些测试 Api Abc 而且门楣没有提醒我把它改成ABC。所以我必须假设它正在检查以“Api”开头的名称。

    字段名的Go约定是什么?或者换言之,还有其他约定我应该知道吗?

    2 回复  |  直到 4 年前
        1
  •  18
  •   Topo    6 年前

    对于大多数情况,Go中的命名约定只是使用camel大小写,如果是公共字段,则以大写开头,如果不是,则以小写开头。但在像API或URL这样的缩写词中,它们是用大写字母写的。 func ProxyURL(fixedURL *url.URL) http package .

    编辑: Go Code Review Comments . 它讨论了英语中的缩写词 Initialisms 章节:

    名称中的首字母缩写词(例如“URL”或“NATO”) 有一个一致的案例。例如,“URL”应显示为“URL”或 ServeHTTP不是ServeHTTP。对于具有多个已初始化的标识符 “words”,例如使用“xmlHTTPRequest”或“xmlHTTPRequest”。

    写“appID”而不是“appID”。

    所以首字母缩略词的规则是它们应该有固定的大小写。在您的情况下,因为它们必须以大写“A”开头,所以您应该将它们写成“API”。

    另外,这只是我个人的观点,我知道示例中的代码可能与您使用的代码不完全相同,但如果是这样,我认为在字段名中包含结构名是一种不好的做法。你在做什么 api.APIField 但是 api.Field 更容易阅读,如果您知道该对象是一个API,那么毫无疑问该字段属于一个API。

        2
  •  4
  •   renno Thomas    6 年前

    正如在您的问题和@topo的回答中提到的,变量和函数命名的约定是Camel Case(混合大写)。如果名称以大写字母开头,则可以导出变量/函数。

    包总是小写的。

    接口应以 -er

    effective go naming session

    另一方面,Golint超越了命名的常规。单词有一些规则,在你的情况下,你就是在遵守其中一条规则。您可以在这里看到完整的列表: https://github.com/golang/lint/blob/master/lint.go#L751