我全神贯注于Go Modules。通常,我更喜欢这种体验。在Go开发中,我(也许像其他许多人一样)将依赖项视为我在单一仓库中工作,我的每个项目都有自己的GOPATH
,并且我经常从头克隆并提取所有内容-最新版本的依赖项。
使用模块,我认为我正在打破最佳实践:
go.mod
文件将仅包含主要(通常只有一个)显式依赖项。实际上,我不会提交go.mod
并离开构建过程来生成它,然后再进行构建。我的想法是,除了例如我正在使用的特定平台,我对它们的熟悉意味着我有信心固定到特定版本,对于其他依赖项,我宁愿保持货币不变并获得@vLatest
。go mod tidy
并将go.mod提交到源代码管理作为构建的基础。此外:
go.sum
和包散列(我不是独立验证而是信任的散列,例如golang.proxy.org
);和这种方法不好吗?
答案 0 :(得分:0)
对于构建版本,依赖项不变性和构建可再现性对于软件版本至关重要。依靠go mod tidy来创建go.mod会假设模块git标记是不可变的,并且始终可用,事实并非如此。为确保模块标记是持久且不可更改的,建议使用go模块存储库。请参阅Go1.11 documentation,以获取“始终在线”模块存储库和企业代理的列表。一段关于“ Go Module and Dependency Management - GoCenter and Project Athens"”的短片讨论了不可变的依赖关系管理。