go - 依赖管理和golang包
问题描述
我们在受保护的网络中运行 golang 代码,我们希望 golang 依赖项(包)已经成为被克隆的 repo 的一部分。
这意味着当 golang 代码运行时,所需的一切都已经存在。我们希望这些依赖项成为 git repo 的一部分。我们不希望动态下载 golang 依赖项。
看起来govendor是一种方法。Go 模块似乎也提供了类似的功能。
实现这些目标的最佳实践是什么?
解决方案
使用 go modules 是推荐的方法。您必须使用go mod vendor
命令将模块复制到开发环境中的供应商目录(显然需要首先下载包)。go mod vendor
不会将软件包下载到供应商目录中,它会从您在开发环境中可能位于$GOPATH/pkg/mod
或类似的东西中的先前下载的模块中复制它们,并将其保存在您的供应商文件夹中,以便在生产中您不需要下载它们。然后,您将使用go build -mod vendor
.
所以总结一下:
- 在您的代码中导入您的包
- 获取依赖进入
$GOPATH/pkg/mod
或类似路径:(go get github.com/name/project@v1.0
此步骤实际上是可选的) - 将包从复制
$GOPATH/pkg/mod
到vendor
:go mod vendor
- 编译代码:
go build -mod vendor
推荐阅读
- javascript - 模拟真实用户点击绕过网络蜜罐
- c# - 你如何正确地发送一个 json 对象到 php 后端
- c++ - 检查(全局)函数是否存在,但不允许隐式转换
- typescript - Typescript 将 JS 数组视为对象
- python - Python:只允许设置具有@property 装饰器的属性
- c - 如何避免使用临时字节数组将 size_t 数组中 16 个元素的最后 7 位加载到 __m128i 中?
- docker - 反应 kubernetes 部署,端口 80 仅适用
- laravel - 雄辩的查询构建器搜索不特定于角色
- apache-kafka - System.ObjectDisposedException:句柄被破坏
- php - PHP 一个注入的对象可以访问它被注入的对象的属性吗?