go clean -modcache 会清空整个模块缓存,不精准;推荐手动删除 $gomodcache/@ 目录,再执行 go mod download 重拉指定版本,避免冗余下载。

go clean -modcache 清除全部模块缓存,但不精准
执行 go clean -modcache 会删掉整个 $GOPATH/pkg/mod(或 $GOMODCACHE)下的所有模块缓存,包括你只想清理的那一个。这在 CI 或多项目共用缓存时很浪费——重新拉取几十个无关依赖,拖慢构建。
手动删除指定模块路径最直接有效
Go 的模块缓存结构是确定的:$GOMODCACHE/<module-path>@<version></version></module-path>。比如你想重拉 github.com/gin-gonic/gin 的 v1.9.1,就删对应目录:
rm -rf $GOMODCACHE/github.com/gin-gonic/gin@v1.9.1
注意几点:
-
$GOMODCACHE默认是$GOPATH/pkg/mod,但可通过go env GOMODCACHE确认实际路径 - 版本号必须完全匹配,
v1.9.1和v1.9.1+incompatible是两个不同目录 - 删完后运行
go mod download或下次go build会自动重新拉取该版本 - Windows 用户用
rd /s /q替代rm -rf,路径分隔符为\
用 go mod download -replace 强制覆盖已有缓存
如果只是想换源或绕过本地缓存验证(比如怀疑缓存文件损坏),可以用 -replace 指向本地临时目录再下载一次:
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
go mod edit -replace github.com/some/pkg=github.com/some/pkg@v1.2.3<br>go mod download github.com/some/pkg@v1.2.3<br>go mod edit -dropreplace github.com/some/pkg
这样 Go 会跳过缓存、走网络重新 fetch,并校验 checksum。适用于被 proxy 缓存污染或校验失败(checksum mismatch)的场景。
为什么不用 go get -u 或 go get -v?
go get 默认不会清除旧缓存,它只更新 go.mod 并拉新版本;加 -u 是升级到最新兼容版,不是重拉指定旧版;加 -v 只是显示过程,不触发清理。真正要“清除 + 重拉”必须拆成两步:先删目录,再 go mod download 或 go build。
最容易被忽略的是 checksum 文件(sum.db 和 cache/download/.../list)不会自动刷新——删了模块目录后,首次 go mod download 会重建它们;但如果之前有 go.sum 冲突,得手动 go mod verify 确认一致性。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










