go clean -modcache 删除 $GOPATH/pkg/mod(或 $GOROOT/pkg/mod)中所有已下载模块的 .zip 包、解压源码、.info 和 .ziphash 文件,不触碰 go.mod、go.sum、vendor/ 或项目源码。

go clean -modcache 会删掉什么
它只动 $GOPATH/pkg/mod(或 $GOROOT/pkg/mod,取决于是否禁用代理)里的东西:所有已下载模块的 .zip 包、解压后的源码目录、.info 和 .ziphash 校验文件。不会碰你项目里的 go.mod、go.sum,也不会删 vendor/ 或任何源码文件。
什么时候必须清 modcache 而不是只跑 go mod tidy
go mod tidy 只管 go.mod 文件的增删和校验和更新,它不清理磁盘上的缓存。以下情况清缓存才是正解:
- 项目重命名后
go mod tidy静默失败,不下载依赖 -
go list -m all显示的版本和go.mod里写的对不上,尤其在切分支或回退go.mod后 - 遇到
invalid version: unknown revision,但远程 tag 确实存在 - 私有模块频繁报
checksum mismatch,且GOSUMDB没关 -
$GOPATH/pkg/mod占用超 10GB,而实际依赖不到 50 个模块
清理后第一次构建会慢,但不会失败
清完缓存再跑 go build 或 go mod download,Go 会按需重新拉取当前 go.mod 所需的最小集合。加 -v 参数能看到每行开头的 Fetching,这就是真实下载地址——你可以借此确认是否走对了代理或私有源。
真正容易被忽略的是:如果用了私有模块,清缓存前得确保 go env GOPRIVATE 已设好,否则 go get 可能跳过校验,拉错版本。

















