本文中译于官方FAQ
Go语言编码
Go库文档是怎么搭建的?
有一个用Go编写的godoc程序,它可以从源代码中提取软件包文档,并将其用作包含声明,文件等链接的网页。实例正在golang.org/pkg/上运行 ,实际上,godoc在golang.org/上实现了完整的网站 。
可将godoc实例配置为在其显示的程序中提供丰富的交互式静态符号分析;详细信息在这里列出。
为了从命令行访问文档, go工具具有一个 doc 子命令,该子命令为相同的信息提供文本界面。
有Go程式设计风格指南吗?
尽管肯定存在某些“Go风格”编码,但是官方没有明确的样式指南。
Go建立了以指导有关命名,布局和文件组织的约定决策。文档Effective Go包含有关这些主题的一些建议。更直接地,程序gofmt是一个漂亮的打印机,其目的是强制执行布局规则。它取代了通常汇编允许和不允许的编译。存储库中的所有Go代码以及开源世界中的绝大多数代码都已通过gofmt运行。
标题为Go Code Review Comments的文档是有关Go成语细节的非常短的文章的集合,程序员通常会忽略这些文章。对于为Go项目进行代码审查的人员,它是一个方便的参考。
如何向Go库提交补丁?
库源位于仓库的src目录中。如果您要进行重大更改,请在提交之前在邮件列表中进行讨论。
有关如何进行的更多信息,请参见文档“ Go项目”。
为什么克隆库时“go get”会使用HTTPS?
公司通常只允许标准TCP端口80(HTTP)和443(HTTPS)上的传出流量,从而阻止其他端口上的传出流量,包括TCP端口9418(git)和TCP端口22(SSH)。当使用HTTPS而不是HTTP时,git默认情况下会强制执行证书验证,从而可以防止中间人攻击,窃听和篡改攻击。因此,go get命令使用HTTPS来确保安全。
可以将Git配置为通过HTTPS进行身份验证,或使用SSH代替HTTPS。要通过HTTPS进行身份验证,您可以在git所查询的$ HOME / .netrc文件中添加一行:
machine github.com login USERNAME password APIKEY
对于GitHub帐户,密码可以是个人访问令牌 。
还可以将Git配置为使用SSH代替HTTPS来匹配与给定前缀匹配的URL。例如,要将SSH用于所有GitHub访问,请将这些行添加到〜/ .gitconfig中:
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
我应该如何使用“go get”管理软件包的版本?
Go工具链具有一个内置系统,用于管理相关软件包的版本集(称为moudle)。moudle是在Go 1.11中引入的,并且从1.14开始就可以投入生产。
要使用模块创建项目,请运行go mod init。此命令创建一个go.mod文件,该文件跟踪依赖项版本。
go mod init example.com/project
要添加,升级或降级依赖项,请运行go get:
go get golang.org/x/text@v0.3.5
有关入门的更多信息,请参见教程:创建模块 。
有关使用模块管理依赖项的指南,请参阅开发模块 。
模块中的程序包应遵循导入兼容性规则,在导入时应保持向后兼容性:
- 如果旧的程序包和新的程序包具有相同的导入路径, 新软件包必须与旧软件包向后兼容。
Go 1兼容性指南在这里是一个很好的参考:不要删除导出的名称,鼓励带标签的复合文字,等等。如果需要其他功能,请添加新名称而不是更改旧名称。
moudle使用语义版本控制 和语义导入版本控制来对此进行编码。如果需要中断兼容性,请以新的主要版本发布模块。主版本2和更高版本的模块在其路径中需要主版本后缀(例如/ v2)。这保留了导入兼容性规则:模块的不同主要版本中的软件包具有不同的路径。