go clean -cache 清构建中间产物(如.a文件),go clean -modcache 清模块源码缓存;误用会导致构建变慢或磁盘未释放,需依go env确认路径后再操作。

go clean -cache 和 go clean -modcache 别混用
两者作用对象完全不同:go clean -cache 清的是构建中间产物($GOCACHE),比如 .a 文件、编译对象;go clean -modcache 清的是模块源码($GOMODCACHE 或 $GOPATH/pkg/mod)。误用会导致:执行 go clean -modcache 后 go run main.go 突然变慢——因为模块没了,得重下;而只跑 go clean -cache 却发现磁盘没明显释放——旧模块缓存还在占着几十 GB。
-
go clean -cache推荐每周一次,尤其频繁改GOOS/GOARCH或跑go test -race后 -
go clean -modcache仅在换代理、校验失败(checksum mismatch)、或确认某模块版本污染时使用 - 执行前务必确认路径:
go env GOCACHE和go env GOMODCACHE输出是否符合预期,别依赖~/go/pkg/mod这种默认猜测
GoLand 设置里关自动构建,但别动 gopls 的 build.ignore
GoLand 默认开启 Build project automatically,它会高频调用 go list 和 go build,间接往 $GOCACHE 写大量临时文件。关掉它能显著减缓缓存膨胀,但注意:Settings → Go → Language Server → build.ignore 是给 gopls 用的过滤规则,不是清理开关。设成 bin/, pkg/, .git/ 只是让 gopls 跳过这些目录做语义分析,对 $GOCACHE 完全无影响。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 真正该关的路径是:
Settings → Go → Build Tags & Vendoring → Build project automatically - 顺手检查
Settings → Tools → File Watchers,禁用所有带go build或go test的 watcher -
build.ignore配错反而可能让gopls误报未定义符号——比如你忽略internal/,但项目里真有跨包引用
GOMODCACHE 必须用环境变量设,GoLand 界面配置无效
很多人在 Settings → Go → GOPATH 里改成 D:\GoModules,结果 go env GOMODCACHE 还是输出 C:\Users\xxx\go\pkg\mod。这是因为 GOMODCACHE 是 Go 工具链读取的环境变量,GoLand 的 SDK 配置只影响 IDE 自身行为(如补全、调试),不干预 go mod download 的落盘路径。
- Windows 用户必须在「系统属性 → 高级 → 环境变量」中新建用户变量
GOMODCACHE,值为D:\GoCache\mod(目录需提前创建且可写) - macOS/Linux 用
export GOMODCACHE="$HOME/go-cache/mod"写入~/.zshrc,然后source ~/.zshrc并重启 GoLand - 设完立刻验证:
go env GOMODCACHE必须返回新路径,否则后续所有操作都白搭 - 旧缓存不会自动迁移,要清 C 盘残留得手动运行
go clean -modcache——但注意:此时go env GOMODCACHE必须已指向新路径,否则删错地方
清理后首次构建变慢是正常现象,别急着回滚
执行 go clean -cache 后,第一次 go build 会明显变慢,这是因所有中间对象要重建;go clean -modcache 后首次 go mod download 也会拉全量依赖。这不是失败信号,而是缓存重置的必经过程。
- 若构建卡住超 2 分钟,先检查
go env GOPROXY是否生效(国内推荐https://goproxy.cn,direct),避免直连超时 - 别在清理中途关终端或杀
gopls进程——Linux 下已打开的缓存文件被占用时,rm后空间不会立刻释放,需等相关进程退出 - CI/CD 中建议固定用
go clean -modcache && go mod download组合,确保每次构建干净,而不是依赖本地残留
$GOCACHE,其实执行的是 rm -rf ~/go/pkg,结果把 pkg/mod 和 pkg/(legacy 构建产物)一起端了,导致模块和 vendor 全乱。看清 go env 输出,比背命令重要得多。

















