Go模块的最佳实践

时间:2019-08-22 16:51:39

标签: go-modules

我全神贯注于Go Modules。通常,我更喜欢这种体验。在Go开发中,我(也许像其他许多人一样)将依赖项视为我在单一仓库中工作,我的每个项目都有自己的GOPATH,并且我经常从头克隆并提取所有内容-最新版本的依赖项。

使用模块,我认为我正在打破最佳实践:

  • 对于每次提交的构建,我项目的go.mod文件将仅包含主要(通常只有一个)显式依赖项。实际上,我不会提交go.mod并离开构建过程来生成它,然后再进行构建。我的想法是,除了例如我正在使用的特定平台,我对它们的熟悉意味着我有信心固定到特定版本,对于其他依赖项,我宁愿保持货币不变并获得@vLatest
  • 如果要构建发行版,请go mod tidy并将go.mod提交到源代码管理作为构建的基础。

此外:

  • 可能破坏的版本(货币可接受);
  • 缺少go.sum和包散列(我不是独立验证而是信任的散列,例如golang.proxy.org);和
  • 重复构建依赖项是我构建过程中不可避免的,

这种方法不好吗?

1 个答案:

答案 0 :(得分:0)

对于构建版本,依赖项不变性和构建可再现性对于软件版本至关重要。依靠go mod tidy来创建go.mod会假设模块git标记是不可变的,并且始终可用,事实并非如此。为确保模块标记是持久且不可更改的,建议使用go模块存储库。请参阅Go1.11 documentation,以获取“始终在线”模块存储库和企业代理的列表。一段关于“ Go Module and Dependency Management - GoCenter and Project Athens"”的短片讨论了不可变的依赖关系管理。