为什么我们在构建go应用程序之前使用go mod下载?

为什么我们在构建go应用程序之前使用go mod下载?,go,Go,当人们用模块制作go应用程序的docker文件时,大多数人都是这样制作的 COPY go.mod . COPY go.sum . RUN go mod download COPY . . RUN go build 但是,当我尝试下面的命令时,它也工作得很好 COPY . . RUN go build 那么,有什么区别呢? 使用GO MOD DOWNLOAD命令有什么好处吗?这样做通常是为了更好地使用缓存。依赖项的变化不像程序本身那样频繁。在单独的步骤中进行下载可以缓存该层。重复构建会更快。G

当人们用模块制作go应用程序的docker文件时,大多数人都是这样制作的

COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN go build
但是,当我尝试下面的命令时,它也工作得很好

COPY . .
RUN go build
那么,有什么区别呢?
使用GO MOD DOWNLOAD命令有什么好处吗?

这样做通常是为了更好地使用缓存。依赖项的变化不像程序本身那样频繁。在单独的步骤中进行下载可以缓存该层。重复构建会更快。

Go 1.11引入了
Go mod download
命令,该命令获取Go.modGo.sum文件并从中下载依赖项,而不是使用源代码。由于这些文件不会频繁更改(除非您正在更新依赖项),因此可以通过Dockerfile中的
COPY
命令来缓存它们。如果我在没有go mod download命令的情况下生成dockerfile,并且只进行构建,那么dockerfile的输出实际上是相同的。但如果没有go mod下载,go运行时应该搜索我的源代码(导入每个.go文件的一部分),这比使用go mod下载命令需要更多的时间。我说的对吗??