4 回答
TA贡献1770条经验 获得超3个赞
这是一个问题#26610,现在已修复。
所以现在你可以使用:
go mod download
为此,您只需要go.mod
/go.sum
文件。
例如,下面是如何进行缓存的多阶段 Docker 构建:
FROM golang:1.17-alpine as builder
RUN apk --no-cache add ca-certificates git
WORKDIR /build
# Fetch dependencies
COPY go.mod go.sum ./
RUN go mod download
# Build
COPY . ./
RUN CGO_ENABLED=0 go build
# Create final image
FROM alpine
WORKDIR /
COPY --from=builder /build/myapp .
EXPOSE 8080
CMD ["./myapp"]
TA贡献1847条经验 获得超7个赞
您可以使用将在主模块的根文件夹中go mod vendor
创建一个文件夹的命令,并将所有依赖项复制到其中。vendor
在此之后,您可以将-mod=vendor
参数传递给 go 工具,然后vendor
文件夹中的依赖项将用于构建/编译/测试您的应用程序。
那么你可以做些什么来加速你的构建:
运行
go mod vendor
命令以获得依赖项的实际版本。保存/缓存此
vendor
文件夹。在构建期间,恢复此
vendor
文件夹,并通过将参数传递给 go 工具来构建/安装您的应用程序-mod=vendor
,因此不会下载任何依赖项,但vendor
会使用该文件夹的内容。
引用自go help mod
:
模块和销售
使用模块时,go 命令完全忽略供应商目录。
默认情况下,go 命令通过从源下载模块并使用这些下载的副本来满足依赖关系(如前一节所述,在验证之后)。为了允许与旧版本的 Go 互操作,或确保用于构建的所有文件都存储在一个文件树中,'go mod vendor' 在主模块的根目录中创建一个名为 vendor 的目录并将所有文件存储在那里来自依赖模块的包,这些包需要支持主模块中包的构建和测试。
要使用主模块的顶级供应商目录进行构建以满足依赖性(禁用通常的网络资源和本地缓存),请使用“go build -mod=vendor”。请注意,仅使用主模块的顶级供应商目录;其他位置的供应商目录仍然被忽略。
TA贡献1936条经验 获得超6个赞
我想使用 重新下载所有依赖项go mod
,这就是我所做的:
去你的
GOROOT
sudo rm -rf pkg/mod/
转到文件
go.mod
所在的目录go mod download
TA贡献1906条经验 获得超10个赞
您可以使用包管理器,其中有很多,例如dep、glide和govendor。dep
较新,将作为官方依赖管理工具集成到 go 工具链中。
我们还为 go 应用程序制作 docker 镜像,我们使用dind制作这些镜像,我们准备了一个预装了所有依赖项的 CI/CD 镜像,以加快构建速度。不过,需要编写一些脚本才能将所有内容粘合在一起。
此外,将依赖项分层可能会导致 docker 镜像的体积变大。我建议尝试多阶段构建,这有助于使图像变得超级精简。
- 4 回答
- 0 关注
- 197 浏览
添加回答
举报