Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang结构字段命名约定是什么?_Go - Fatal编程技术网

Golang结构字段命名约定是什么?

Golang结构字段命名约定是什么?,go,Go,我正在尝试使用VisualStudio代码学习Go,我猜它使用的是Go linter。我创建这个结构是为了将JSON对象映射到 type someAPI struct { ApiEndpoint string `json:"apiEndpoint"` ApiVersion string `json:"apiVersion"` ... } 我收到这些警告 结构字段apidentpoint应为apidentpoint 结构字

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

type someAPI struct {
    ApiEndpoint string   `json:"apiEndpoint"`
    ApiVersion  string   `json:"apiVersion"`
    ...
}
我收到这些警告

结构字段apidentpoint应为apidentpoint

结构字段ApiVersion应为ApiVersion

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

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

我通过将
Api
更改为
Abc
进行了一些测试,但linter没有警告我将其更改为“Abc”。所以我必须假设它正在检查以“Api”开头的名称


字段名的Go约定是什么?或者换句话说,我还应该了解其他约定吗?

对于大多数情况,Go中的命名约定只是使用驼峰大小写,如果是公共字段,则以大写开头,如果不是,则以小写开头。但在API或URL等首字母缩略词中,它们都是用大写字母书写的,例如在屏幕上的
func-ProxyURL(fixedURL*URL.URL)

编辑:我搜索了更多信息,网站上有关于首字母缩略词的指南。本节将讨论首字母缩略词:

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

当“ID”是“identifier”的缩写时,该规则也适用于“ID”,因此 写“appID”而不是“appID”

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


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

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

包总是小写的

接口应以
-er

你可以在网上阅读更多


另一方面,Golint超越了命名的Go约定。单词有一些规则,在你的例子中,你正符合其中一条规则。您可以在这里看到完整的列表:

所以这里有一个大写首字母缩略词列表?你知道有任何文件建议使用大写字母作为首字母缩略词吗?我想我在想,这是否只是因为linter VSC正在使用,或者fmt之类的东西也会警告我?我不知道有任何文档建议这样做。在go博客上,他们写了关于使用camel case的文章,但没有提到首字母缩略词。而且
gofmt
不强制首字母缩写的命名约定,所以我想这只是他们在VSC中实现它的方式,但这是标准库的编写方式,所以如果你想坚持一个可能是你应该使用的标准。@Jerinaw我找到了首字母缩写命名的文档。请参阅我的更新答案。@Jerinaw您的IDE可能使用了golint,它定义了一系列“已知首字母组合”,如果它们不是常量大小写,它会抱怨这些组合。如果我有一系列多个首字母缩略词,该怎么办?在Java中,这就是为什么我使用像
httphtsswitcher
这样的名称,但根据这条指导原则,它将是
httphtsswitcher
(或者
httphtsswitcher
以降低可见性),这让人读起来很痛苦。下划线?