我实在无法理解设置供应商文件夹的目的。根据我了解到的情况,似乎供应商 夹子 只有当你想让你的 repo 兼容早于 1.11
. 我们正在运行golang 1.12.14
.
当我向我的同事提出这个问题时,他说:"请使用供应商与模块--go没有全局的工件库。
请使用供应商的模块 - Go没有一个全局的人工智能. 这是目前最好的选择,以确保你有一个密封的构建,你的代码不会打破 当有人改变他们的repo的东西。
我以为这就是Go模块的功能?我问了这个问题,有评论者说我不应该使用供应商?在提交前的钩子中加入`go mod vendor`有意义吗?
去模块 带来的保证,你将能够通过将依赖关系锁定在一个 go.sum
. 也就是说,只有当你的依赖关系在未来仍然可以访问时,确定地构建你的项目的承诺才会成立。你不知道是否会是这样的情况。
另一方面,无论有没有Go模块,Vendoring都能带来更强的保证,因为它可以在代码旁边提交依赖关系。因此,即使远程仓库无法访问(删除、重命名等),你仍然可以构建你的项目。
另一种方法是使用Go模块和代理。你可以在 公文. 你也可以看看一些OSS的实现,如 诸神之神 或 goproxygoproxy. 如果你不喜欢建立和维护自己的代理,市场上有一些商业优惠。
所以你应该 go mod vendor
每次承诺?这最终取决于你想要什么样的保证。不过是的,利用代理或提供你的依赖性有助于更接近可复制的构建。