如何找到 Go 模块源缓存?
How do I find the Go module source cache?
我已经将一个项目升级到 Go 1.11 并为我的项目启用了模块支持,但似乎 CircleCI 正在重新下载每个构建的依赖项。我知道 CircleCI 允许在重建之间进行缓存,所以我查看了 Go 模块的文档,虽然它提到了缓存,但我似乎无法找到它实际存在的位置。
Go 模块的源缓存在哪里?
从最终的 1.11 版本开始,go module cache(用于存储下载的模块和源代码)位于 $GOPATH/pkg/mod
位置(参见文档here)。为了澄清,go build cache(用于存储最近的编译结果)位于不同的位置。
This article, indicated that it's in the $GOPATH/src/mod
, but in the timespan of the recent ~40 days, the golang team must have changed that target location. This message thread 讨论了为什么下载的项目最终在 $GOPATH/pkg
。
您还可以使用 go mod download -json
命令查看下载的 modules/source 元数据及其在本地磁盘上的位置。下面的示例输出:
$ go mod download -json
go: finding github.com/aws/aws-sdk-go v1.14.5
go: finding github.com/aws/aws-lambda-go v1.2.0
{
"Path": "github.com/aws/aws-lambda-go",
"Version": "v1.2.0",
"Info": "/go/pkg/mod/cache/download/github.com/aws/aws-lambda-go/@v/v1.2.0.info",
"GoMod": "/go/pkg/mod/cache/download/github.com/aws/aws-lambda-go/@v/v1.2.0.mod",
"Zip": "/go/pkg/mod/cache/download/github.com/aws/aws-lambda-go/@v/v1.2.0.zip",
"Dir": "/go/pkg/mod/github.com/aws/aws-lambda-go@v1.2.0",
"Sum": "h1:2f0pbAKMNNhvOkjI9BCrwoeIiduSTlYpD0iKEN1neuQ=",
"GoModSum": "h1:zUsUQhAUjYzR8AuduJPCfhBuKWUaDbQiPOG+ouzmE1A="
}
{
"Path": "github.com/aws/aws-sdk-go",
"Version": "v1.14.5",
"Info": "/go/pkg/mod/cache/download/github.com/aws/aws-sdk-go/@v/v1.14.5.info",
"GoMod": "/go/pkg/mod/cache/download/github.com/aws/aws-sdk-go/@v/v1.14.5.mod",
"Zip": "/go/pkg/mod/cache/download/github.com/aws/aws-sdk-go/@v/v1.14.5.zip",
"Dir": "/go/pkg/mod/github.com/aws/aws-sdk-go@v1.14.5",
"Sum": "h1:+l1m6QH6LypE2kL0p/G0Oh7ceCv+IVQ1h5UEBt2xjjU=",
"GoModSum": "h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k="
}
该输出来自 CircleCI 2.0 的构建,使用他们的官方 circleci/golang:1.11
图像。这是一个人为的例子,展示了如何为新的 golang 模块缓存位置包含 restore_cache
和 save_cache
步骤:
steps:
- checkout
- restore_cache:
keys:
- gomod-cache-{{ checksum "go.sum" }}
- run: go vet ./...
- save_cache:
key: gomod-cache-{{ checksum "go.sum" }}
paths:
- /go/pkg/mod
我已经将一个项目升级到 Go 1.11 并为我的项目启用了模块支持,但似乎 CircleCI 正在重新下载每个构建的依赖项。我知道 CircleCI 允许在重建之间进行缓存,所以我查看了 Go 模块的文档,虽然它提到了缓存,但我似乎无法找到它实际存在的位置。
Go 模块的源缓存在哪里?
从最终的 1.11 版本开始,go module cache(用于存储下载的模块和源代码)位于 $GOPATH/pkg/mod
位置(参见文档here)。为了澄清,go build cache(用于存储最近的编译结果)位于不同的位置。
This article, indicated that it's in the $GOPATH/src/mod
, but in the timespan of the recent ~40 days, the golang team must have changed that target location. This message thread 讨论了为什么下载的项目最终在 $GOPATH/pkg
。
您还可以使用 go mod download -json
命令查看下载的 modules/source 元数据及其在本地磁盘上的位置。下面的示例输出:
$ go mod download -json
go: finding github.com/aws/aws-sdk-go v1.14.5
go: finding github.com/aws/aws-lambda-go v1.2.0
{
"Path": "github.com/aws/aws-lambda-go",
"Version": "v1.2.0",
"Info": "/go/pkg/mod/cache/download/github.com/aws/aws-lambda-go/@v/v1.2.0.info",
"GoMod": "/go/pkg/mod/cache/download/github.com/aws/aws-lambda-go/@v/v1.2.0.mod",
"Zip": "/go/pkg/mod/cache/download/github.com/aws/aws-lambda-go/@v/v1.2.0.zip",
"Dir": "/go/pkg/mod/github.com/aws/aws-lambda-go@v1.2.0",
"Sum": "h1:2f0pbAKMNNhvOkjI9BCrwoeIiduSTlYpD0iKEN1neuQ=",
"GoModSum": "h1:zUsUQhAUjYzR8AuduJPCfhBuKWUaDbQiPOG+ouzmE1A="
}
{
"Path": "github.com/aws/aws-sdk-go",
"Version": "v1.14.5",
"Info": "/go/pkg/mod/cache/download/github.com/aws/aws-sdk-go/@v/v1.14.5.info",
"GoMod": "/go/pkg/mod/cache/download/github.com/aws/aws-sdk-go/@v/v1.14.5.mod",
"Zip": "/go/pkg/mod/cache/download/github.com/aws/aws-sdk-go/@v/v1.14.5.zip",
"Dir": "/go/pkg/mod/github.com/aws/aws-sdk-go@v1.14.5",
"Sum": "h1:+l1m6QH6LypE2kL0p/G0Oh7ceCv+IVQ1h5UEBt2xjjU=",
"GoModSum": "h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k="
}
该输出来自 CircleCI 2.0 的构建,使用他们的官方 circleci/golang:1.11
图像。这是一个人为的例子,展示了如何为新的 golang 模块缓存位置包含 restore_cache
和 save_cache
步骤:
steps:
- checkout
- restore_cache:
keys:
- gomod-cache-{{ checksum "go.sum" }}
- run: go vet ./...
- save_cache:
key: gomod-cache-{{ checksum "go.sum" }}
paths:
- /go/pkg/mod