我正在使用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进一步加快构建速度.

Go相关问答推荐

GoLang Mochi MQTT服务器(带Python Paho MQTT客户端SSL身份验证失败

Golang Cososdb-gremlin连接

gorm插入不支持的数据

在Go中根据命名空间/字符串生成UUID

ChromeDriver不存在(高朗selenium)

如何使用工作区方法扩展克隆的Golang库

在Golang中Mergesort的递归/并行实现中出现死锁

如何使用Gio设置标题栏图标

如何修复proxyconnect tcp:tls:第一条记录看起来不像tls握手

Golang 创建一个带有处理程序的模拟数据库并使用接口调用数据库

Go cmp - 如何为以 struct 为键的映射定义自定义相等性?

仅在工作日运行 cron

如何在 Windows 上使用 cgo 为 386 arch 构建 lib?

GRPC 反向代理混淆 GRPC 和 GRPC-Web

将 CSVExport 函数传递给处理程序 Gin

如何在 Unmarshal 中使用泛型(转到 1.18)

Scanner.Buffer - 最大值对自定义拆分没有影响?

不能使用 *T 类型的变量作为参数类型

即使没有竞争条件也没有得到任何输出

Go 泛型是否与 LINQ to Objects 等效?