go clean -modcache 是最直接的重置方式,它会清空 $GOPATH/pkg/mod 下所有已缓存的模块,包括 cache/download 和解压后的模块树,执行后 go build、go mod download 等命令都会重新拉取全部依赖。

go clean -modcache 是最直接的重置方式
它会清空 $GOPATH/pkg/mod 下所有已缓存的模块,包括 cache/download 和解压后的模块树。执行后,go build、go mod download 等命令都会重新拉取全部依赖——相当于“重装系统”。
注意:go clean -modcache 不区分项目,是全局操作;它不清理 vendor/ 目录,也不影响 replace 指向本地路径的模块(那些本来就不进缓存)。
- 运行前建议先
go mod tidy确保go.mod是最新状态,避免重下后版本错乱 - CI 中慎用:会强制重拉所有模块,显著拖慢构建时间
- 本地开发时若遇到 checksum mismatch 或反复提示 missing git hash,可优先尝试此操作
只删某个出问题的模块更轻量
如果只是某一个模块(比如 github.com/some/lib)校验失败或版本混乱,没必要清空全部缓存。直接定位并删除对应缓存即可:
执行:rm -rf $(go env GOMODCACHE)/github.com/some/lib@v1.2.3
立即学习“go语言免费学习笔记(深入)”;
这个路径由 go env GOMODCACHE 决定,不是硬编码;@v1.2.3 是完整版本标识(含伪版本),不能简写为 v1.2.3 或漏掉 @。
- 删完后运行
go mod download github.com/some/lib@v1.2.3单独重拉,比全量清理快得多 - 适用于 CI 失败日志里明确指出某个模块 checksum 不匹配的场景
- 注意:如果该模块被多个项目共用,其他项目下次构建也会触发重拉
重置前必须确认 GOPROXY 和 GOSUMDB 设置
缓存重置后,下载行为完全取决于当前环境变量。如果 GOPROXY 还是默认的 https://proxy.golang.org,国内用户大概率卡住或超时;如果 GOSUMDB 未关或没配镜像,仍可能因校验失败中断。
推荐设置:
go env -w GOPROXY=https://goproxy.cn,directgo env -w GOSUMDB=sum.golang.org+https://goproxy.cn/sumdb/sum.golang.org
-
direct是关键:确保私有域名(如git.internal.company.com)能 fallback 到直连 - 不要只改
go env -w就以为生效——新开终端要确认env | grep GOPROXY是否真继承了 - 临时测试可用
GOPROXY=https://goproxy.cn go mod download -x验证请求是否真的走镜像
go mod download all 并不等于“彻底重置”
go mod download all 的作用是把 go list -m all 输出的所有模块拉到本地缓存,但它不会清理旧缓存,也不会修复损坏的校验数据。它只是“补全”,不是“重置”。
常见误判场景:
- 执行
go mod download all后仍报 checksum mismatch → 说明缓存里已有坏数据,得先删再下 - 某个
replace指向远程 URL(如replace example.com/a => https://github.com/x/a v1.2.0)→go mod download all会跳过它,直到go build真正需要时才拉 - 模块被
exclude但仍在go list -m all输出里 → 它仍会被下载,但实际编译时不会用
真正要重置,核心动作只有两个:删缓存目录 + 确保代理和校验配置干净。其它命令都是辅助,不是替代。


















