go clean -modcache 是清模块缓存的唯一标准命令,它安全删除 $gomodcache 下所有已下载模块及相关文件,但不触碰 go.mod、go.sum 或 vendor/;清理后首次构建会重下依赖,仅变慢不报错。

go clean -modcache 是清模块缓存的唯一标准命令
它会删掉 $GOPATH/pkg/mod(或 $GOMODCACHE)下所有已下载的模块 zip 包、解压后的源码目录、校验文件(如 .info、.ziphash),但不会碰项目里的 go.mod、go.sum 或 vendor/。清理后首次 go build 会重下所需模块,仅变慢,不报错。
常见误操作是直接 rm -rf $GOPATH/pkg/mod —— 这看似一样,但绕过了 Go 工具链的路径解析逻辑,若你设过 GOMODCACHE 或启用了 GOROOT/pkg/mod(极少见),就可能删错地方。
- 执行前先确认模块缓存真实位置:
go env GOMODCACHE - 确保
GO111MODULE=on,否则go clean -modcache静默无效 - 别在发布前临时执行:重拉依赖不可控,CI 中建议提前加到构建脚本开头
什么情况下必须清 modcache,而不是只 run go mod tidy
go mod tidy 只改 go.mod 和 go.sum,不删磁盘上已下载的旧版本模块。所以它解决不了磁盘空间问题,只解决“依赖声明冗余”。真正该清 modcache 的信号有:
-
du -sh $(go env GOMODCACHE)超 10GB,但go list -m all | wc -l不到 50 行 - 遇到
invalid version: unknown revision,且确认远程 tag 存在 -
go list -m all显示的版本和go.mod里写的对不上(尤其切换分支后) - 启用了私有代理(如 Nexus),但频繁报
checksum mismatch,而go env GOSUMDB没关
清完之后空间没立刻减少?不是命令失效,是进程还占着文件
Linux/macOS 下,go clean -modcache 删除的是文件系统链接,如果 VS Code Go 插件、GoLand indexing、或后台 go build 进程还在读取缓存里的 zip 或源码目录,空间就不会释放。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
验证是否真清干净:lsof +D $(go env GOMODCACHE) | wc -l,输出为 0 才算彻底无占用。
- 最简单见效法:关掉 IDE,再跑一次
go build -a ./,强制重建缓存,旧文件句柄自动释放 - CI 环境更推荐从源头避免:设
GOCACHE=off+go clean -modcache,构建完即销毁 - 别信 “删了就立刻空出 8GB” —— 实际释放时机取决于谁还开着那些文件
想省事又不想全删?可以只剔除不用的模块
全量 go clean -modcache 在团队中容易引发重复下载。更精细的做法是定位并删除明确不再需要的模块:
- 提取当前项目实际用到的所有模块:
go mod graph | awk '{print $1}' | sort -u > used.txt - 列出缓存中所有模块路径:
ls -d $GOMODCACHE/*/* 2>/dev/null - 手动删掉不在
used.txt里的私有域名模块(如git.internal.company.com/legacy@v0.1.0) - 公共模块可配合
go mod tidy -v后再清,因为tidy会先移除未引用的require,缩小后续清理范围
模块缓存本身不是敌人,失控的生命周期才是。看清 go env GOCACHE 和 go env GOMODCACHE 分别管什么,比记住命令更重要。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










