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條經驗 獲得超7個贊
我想使用 重新下載所有依賴項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 關注
- 247 瀏覽
添加回答
舉報