Go模块缓存默认存储在$GOPATH/pkg/mod,长期积累会占用磁盘空间。使用go clean -modcache可彻底清除缓存,下次构建时重新下载。原生命令不支持自动清理未引用的module,需手动删除或借助脚本、第三方工具实现选择性清理。为减少缓存膨胀,建议定期执行go clean -modcache,结合go mod tidy优化依赖,并在Docker中合理设计缓存层。
Go modules 引入后,依赖会被缓存到本地模块缓存目录中,提升构建效率。但随着项目迭代,一些 module 版本可能不再使用,长期积累会占用磁盘空间。Golang 提供了多种方式来管理和清理无用的 module 缓存。
查看当前 module 缓存情况
Go 提供 go list -m -u all 和 go mod graph 等命令帮助分析依赖,但要了解缓存本身的状态,可以查看缓存目录位置:
默认路径为:- Linux/macOS:
$GOPATH/pkg/mod- Windows:
%GOPATH%\pkg\mod你也可以通过以下命令确认:
go env GOPATH
清理所有 module 缓存
如果想彻底清空模块缓存(比如解决依赖异常或节省空间),可使用:
go clean -modcache
该命令会删除整个 $GOPATH/pkg/mod 目录内容。下次构建时会重新下载所需 module,适合用于“重置”依赖环境。
选择性清理未引用的 module 版本
目前 Go 原生命令不支持“仅删除未被任何项目使用的 module”这一粒度的操作。也就是说,Go 不自动追踪哪些 module 是“无用”的,只要下过就会保留在缓存中。
若需精细化管理,可考虑:
- 手动进入
$GOPATH/pkg/mod删除特定 module 目录 - 编写脚本比对当前项目
go.mod所需版本与缓存中的实际内容 - 使用第三方工具辅助分析(如
gomod相关生态工具)
避免缓存膨胀的建议
虽然无法自动清理“无用”缓存,但可通过以下方式减少影响:
- 定期运行
go clean -modca(特别是在 CI/CD 环境)
che - 使用
go mod tidy确保go.mod和go.sum干净,避免引入冗余依赖 - 在 Docker 构建中将
modcache层放在最后,便于复用
基本上就这些。Go 的 module cache 设计偏向“只增不减”,强调构建稳定性而非磁盘优化,因此主动清理需要开发者介入。合理使用 go clean -modcache 是最直接有效的手段。

che






