go clean -modcache 会清空 $GOMODCACHE 目录(默认为 $GOPATH/pkg/mod)下所有内容,包括各模块的 @vX.Y.Z 解压源码、.zip 包、.info/.ziphash 校验文件及 cache/download/ 下的元数据,但不删除项目内的 go.mod、go.sum 或 vendor/。

go clean -modcache 会删掉哪些文件
它清空的是 $GOMODCACHE 目录(默认为 $GOPATH/pkg/mod)下所有内容:每个模块的 @vX.Y.Z 解压源码目录、.zip 包、校验文件(如 .info、.ziphash),以及 cache/download/ 下对应域名的缓存元数据。不会动你项目里的 go.mod、go.sum 或 vendor/。
执行前必须确认 GO111MODULE=on
如果环境变量没开,go clean -modcache 会静默失败——什么也不删,还让你误以为清理成功。
- 检查方式:
go env GO111MODULE,输出应为on - 临时开启:
GO111MODULE=on go clean -modcache - 永久设置:
go env -w GO111MODULE=on
只想删某个模块,别全清
全量清理在 CI 或团队共享机器上容易引发重复下载风暴。更稳妥的做法是精准删除:
- 查模块路径:
go list -m github.com/some/lib - 删源码和 zip:
rm -rf $(go env GOMODCACHE)/github.com/some/lib@v1.2.3 - 删下载缓存:
rm -rf $(go env GOMODCACHE)/cache/download/github.com/some/lib - 再跑
go mod verify确保后续拉取的校验和与go.sum一致
清理后 go build 还卡住?可能是进程锁着文件
Linux/macOS 下,go clean -modcache 删除的是文件链接,实际磁盘空间要等持有句柄的进程释放。常见干扰源:
立即学习“go语言免费学习笔记(深入)”;
- VS Code 的 Go 扩展后台分析
- GoLand 的 indexing 进程
- 未退出的
go test -v或go run实例
验证是否真清了:lsof +D $(go env GOMODCACHE) | wc -l,输出为 0 才算干净。否则先关 IDE,再重试。


















