我正在使用go 1.11和模块支持.我知道go工具现在会在build/install上自动安装依赖项.我也理解其中的道理.
我正在使用docker构建我的二进制文件.在许多其他生态系统中,复制依赖项 list (package.json、requirements.txt等)并将依赖项作为构建的单独阶段安装是很常见的.这利用了docker的层缓存,并使重建速度大大加快,因为通常代码更改的数量远远超过依赖项更改的数量.
我想知道vgo是否有办法做到这一点?
我正在使用go 1.11和模块支持.我知道go工具现在会在build/install上自动安装依赖项.我也理解其中的道理.
我正在使用docker构建我的二进制文件.在许多其他生态系统中,复制依赖项 list (package.json、requirements.txt等)并将依赖项作为构建的单独阶段安装是很常见的.这利用了docker的层缓存,并使重建速度大大加快,因为通常代码更改的数量远远超过依赖项更改的数量.
我想知道vgo是否有办法做到这一点?
这是一个问题#26610,现在已经修复了.
因此,现在您只需使用:
go mod download
要使其工作,您只需要go.mod
/go.sum
文件.
例如,下面介绍如何拥有缓存的多阶段Docker构建:(source)
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"]
另请参阅文章Containerize Your Go Developer Environment – Part 2,其中描述了如何利用Go compiler cache进一步加快构建速度.