是否从go.mod手动获取依赖项?
我正在使用go 1.11和模块支持。我知道go工具现在会在构建/安装时自动安装依赖项。我也理解其中的道理 我正在使用docker构建我的二进制文件。在许多其他生态系统中,复制依赖项清单(package.json、requirements.txt等)并将依赖项作为构建的单独阶段安装是很常见的。这利用了docker的层缓存,并且使得重建速度更快,因为通常代码更改的数量远远超过依赖项更改的数量是否从go.mod手动获取依赖项?,go,go-modules,Go,Go Modules,我正在使用go 1.11和模块支持。我知道go工具现在会在构建/安装时自动安装依赖项。我也理解其中的道理 我正在使用docker构建我的二进制文件。在许多其他生态系统中,复制依赖项清单(package.json、requirements.txt等)并将依赖项作为构建的单独阶段安装是很常见的。这利用了docker的层缓存,并且使得重建速度更快,因为通常代码更改的数量远远超过依赖项更改的数量 我想知道vgo是否有办法做到这一点?您可以使用包管理器,其中有许多类似的,和dep较新,将作为官方依赖项管理
我想知道vgo是否有办法做到这一点?您可以使用包管理器,其中有许多类似的,和
dep
较新,将作为官方依赖项管理工具集成到go工具链中
我们还为go应用程序制作docker映像,并使用来制作这些映像,我们准备了一个带有所有预安装依赖项的CI/CD映像,以加快构建速度。不过,需要一点脚本才能将所有内容粘合在一起
此外,将依赖项分层可能会导致docker图像的大尺寸。我建议尝试一下有助于使图像超级精简的方法。您可以使用
go mod vendor
命令,该命令将在主模块的根文件夹中创建一个vendor
文件夹,并将所有依赖项复制到其中。在此之后,您可以将-mod=vendor
参数传递给go工具,然后将使用vendor
文件夹中的依赖项来构建/编译/测试您的应用程序
因此,您可以采取哪些措施来加快构建速度:
go mod vendor
命令以获得依赖项的实际版本供应商
文件夹供应商
文件夹,并通过将-mod=vendor
参数传递到go工具来构建/安装您的应用程序,因此不会下载依赖项,但将使用供应商
文件夹的内容转到帮助模块
中引用:
模块与供应商
使用模块时,go命令完全忽略供应商目录
默认情况下,go命令通过下载模块来满足依赖关系
从其来源并使用下载的副本(经核实,
如前一节所述)。允许与较旧的
Go的版本,或确保存储用于生成的所有文件
在单个文件树中,“go mod vendor”一起创建一个名为
供应商位于主模块的根目录中,并将所有
来自依赖模块的包,这些包是支持构建和
主模块中的软件包测试
使用主模块的顶级供应商目录进行构建以满足
依赖项(禁用常用网络源和本地源的使用
缓存),使用“go build-mod=vendor”。请注意,只有主模块的
使用顶级供应商目录;其他位置的供应商目录
我们仍然被忽视
这是一个问题,现在已经解决了
因此,现在您可以使用:
go mod download
要使其工作,您只需要go.mod
/go.sum
文件
例如,以下是如何缓存多级Docker构建:
FROM golang:1.12-alpine as builder
RUN apk --no-cache add ca-certificates git
WORKDIR /build/myapp
# Fetch dependencies
COPY go.mod ./
RUN go mod download
# Build
COPY . ./
RUN CGO_ENABLED=0 go build
# Create final image
FROM alpine
WORKDIR /root
COPY --from=builder /build/myapp/myapp .
EXPOSE 8080
CMD ["./myapp"]
我想使用
go mod
重新下载所有依赖项,我就是这么做的:
GOROOT
sudo-rm-rf-pkg/mod/
Go.mod
文件的目录go mod下载
这更多的是一个问题,1.11版本的新系统是否有一个内置的方法来实现这一点。如果你查看dep repo,你会发现它实际上已经被弃用于模块:(这不只是
go mod download
?它是否在/go/bin中安装了该软件包?