- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在开发一个使用 vgo 和 Dockerfile 的 go 项目,我希望 docker 缓存项目的依赖项,使其具有两个属性:
go.mod
文件发生变化,依赖会重新下载go.mod
,则不会重新下载依赖项。现在,我愿意:
...
RUN go get -u golang.org/x/vgo
COPY . /go/src/whatever
RUN vgo install
...
但是如果你改变一个 go 文件,dockerfile 必须从 COPY
层开始重建。
简而言之,我想做的是:
...
RUN go get -u golang.org/x/vgo
COPY go.mod /go/src/whatever
RUN vgo install_dependencies
COPY . /go/src/whatever
RUN vgo install
...
这样,如果我更改 go.mod
,所有依赖项都将被下载并重新构建,否则,我们可以继续构建二进制文件。
我可以看到几种获得这种行为的方法,但它们都有缺点:
$GOPATH/src/mod
复制到 docker 容器中,但这会有很多我不需要的文件vgo mod -vendor
并复制 vendor 目录,但这依赖于开发人员记住运行 vgo mod -vendor
每次 go.mod
更改时,否则应用程序将无法构建,他们必须在重试 docker 构建之前运行 vgo mod -vendor
。你能想出一种方法让我获得像我想象中的 vgo install_dependencies
这样的行为吗?我是否错过了这样做的 vgo 技巧?
最佳答案
tl;dr:在当前的 go master 和 future 的 go 版本中,go mod download
将完成这项工作。现在你需要一个 hack。
在 gophers slack 上,我被提到了这个问题:https://github.com/golang/go/issues/26610我了解到这或多或少会做我想要的(假设您使用的是 go 版本 1.11beta3):
# Populate the module cache based on the go.{mod,sum} files.
COPY go.mod .
COPY go.sum .
RUN go list -e $(go list -f '{{.Path}}' -m all)
在线程的后面,Russ Cox 实现了 go mod download
,它将在 go
的下一版本中提供,让我可以删除愚蠢的 go列出
上面的hack。
更新:go mod 下载
现已广泛使用,您应该在 go 1.12 及更高版本上使用它
关于docker - 如何使用 vgo 和给定的 go.mod 下载所有依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51126349/
我正在尝试使用 vgo,但出现以下错误 $ vgo build ./... vgo: resolving import "github.com/Sirupsen/logrus" vgo: findin
到目前为止,我在 vgo 中看到的每个示例都需要您编写模块,上传它,然后创建一个新的应用程序模块来测试基本模块。 有没有一种方法可以通过跳过 repo 步骤并仅向您的模块添加一个主包来向控制台输出一些
我正在尝试构建“go-vgo/robotgo”库。 我已经按照每个步骤进行操作,例如下载“mingw”(32 位)并添加“zlib,pnglib” zlib&libpng Windows32 GCC'
我正在尝试将 vgo 引入到我们公司的一些项目中以进行依赖管理,但我遇到了一些与私有(private)存储库相关的问题。 假设我们有以下代码结构: go/src/companyName/project
我有一个项目目前在我的 GOPATH /usr/local/go/src/ 然后我进入我的项目根目录并运行:go get -u golang.org/x/vgo 在我的 main.go 中,我想使用
我正在开发一个使用 vgo 和 Dockerfile 的 go 项目,我希望 docker 缓存项目的依赖项,使其具有两个属性: 如果go.mod文件发生变化,依赖会重新下载 如果我更改包中的文件,但
我正在使用版本化的 Go 命令来管理我的 vendor ,一切正常,但是当我运行 go build 时,它找不到我的本地包 我已经在我的 go.mod 中设置了模块根目录,但我仍然遇到错误 build
我是一名优秀的程序员,十分优秀!