为了账号安全,请及时绑定邮箱和手机立即绑定

依赖管理和golang包

依赖管理和golang包

Go
泛舟湖上清波郎朗 2022-06-21 09:52:30
我们在受保护的网络中运行 golang 代码,我们希望 golang 依赖项(包)已经成为被克隆的 repo 的一部分。这意味着当 golang 代码运行时,所需的一切都已经存在。我们希望这些依赖项成为 git repo 的一部分。我们不希望动态下载 golang 依赖项。看起来govendor是一种方法。Go 模块似乎也提供了类似的功能。实现这些目标的最佳实践是什么?
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

使用 go modules 是推荐的方法。您必须使用go mod vendor命令将模块复制到开发环境中的供应商目录(显然需要首先下载包)。go mod vendor不会将软件包下载到供应商目录中,它会从您在开发环境中可能位于$GOPATH/pkg/mod或类似的东西中的先前下载的模块中复制它们,并将其保存在您的供应商文件夹中,以便在生产中您不需要下载它们。然后,您将使用go build -mod vendor.

所以总结一下:

  1. 在您的代码中导入您的包

  2. 获取依赖进入$GOPATH/pkg/mod或类似路径:(go get github.com/name/project@v1.0此步骤实际上是可选的)

  3. 将包从复制$GOPATH/pkg/modvendorgo mod vendor

  4. 编译代码:go build -mod vendor


查看完整回答
反对 回复 2022-06-21
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

只是为了扩展您对问题的评论,是的,使用 go 模块,但这仍然不能解决您的请求,您将需要使用模块和 go modules 提供的供应商选项。然后您的所有依赖项将存储在您的存储库内的供应商文件夹中,您签入该文件夹,然后用户只需签出您的存储库并拥有所有依赖项。

还要查看 go env 变量GOFLAGS=-mod=vendor,您需要为 go 工具设置它来查看您的供应商与检查网络(我在我们的构建管道上设置了它)

有关该 env 变量的详细说明,请参阅https://github.com/golang/go/issues/27227


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信