首页 > 解决方案 > 依赖管理和golang包

问题描述

我们在受保护的网络中运行 golang 代码,我们希望 golang 依赖项(包)已经成为被克隆的 repo 的一部分。

这意味着当 golang 代码运行时,所需的一切都已经存在。我们希望这些依赖项成为 git repo 的一部分。我们不希望动态下载 golang 依赖项。

看起来govendor是一种方法。Go 模块似乎也提供了类似的功能。

实现这些目标的最佳实践是什么?

标签: go

解决方案


使用 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

推荐阅读