我正在使用官方的 golang alpine 镜像来编译我的源代码(我的主机是 Mac),即使在容器内挂载整个 $GOPATH,我注意到它并没有使用以前构建的缓存数据。我检查它是否在 $GOPATH/pkg 目录中创建,但这不会影响后续的构建速度。
然而,如果我重复使用同一个容器进行多次编译,它确实会使用某种缓存,您可以在我做的这个实验中看到结果:
使用不同的容器,每次构建所需的时间都保持在 28-30 秒左右:
Go在$GOPATH以外的某个地方使用了任何类型的缓存吗?
然而,如果我重复使用同一个容器进行多次编译,它确实会使用某种缓存,您可以在我做的这个实验中看到结果:
使用不同的容器,每次构建所需的时间都保持在 28-30 秒左右:
$ rm -r $GOPATH/pkg/linux_amd64
$ time docker run -v$GOPATH:/go -e CGO_ENABLED=0 golang:1.9-alpine3.6 go build -i github.com/myrepo/mypackage
...
0.02s user 0.08s system 0% cpu 30.914 total
$ time docker run -v$GOPATH:/go -e CGO_ENABLED=0 golang:1.9-alpine3.6 go build -i github.com/myrepo/mypackage
...
0.02s user 0.07s system 0% cpu 28.128 total
重复使用同一个容器,后续构建速度更快:
$ rm -r $GOPATH/pkg/linux_amd64
$ docker run -d -v$GOPATH:/go -e CGO_ENABLED=0 golang:1.9-alpine3.6 tail -f /dev/null
bb4c08867bf2a28ad87facf00fa9dcf2800ad480fe1e66eb4d8a4947a6efec1d
$ time docker exec bb4c08867bf2 go build -i github.com/myrepo/mypackage
...
0.02s user 0.05s system 0% cpu 27.028 total
$ time docker exec bb4c08867bf2 go build -i github.com/myrepo/mypackage
0.02s user 0.06s system 0% cpu 7.409 total
Go在$GOPATH以外的某个地方使用了任何类型的缓存吗?
rm
命令失败了),但结果是一样的,挂载整个$GOPATH文件夹。 - colega