goland 中 go clean -cache 不起作用是因为它只清 $gocache 但不校验构建模式兼容性;clean project 不清模块缓存,需用 go clean -modcache;ide 卡顿常因 $gopath/pkg/mod 过大,应定期清理并关闭 build on save。

GoLand 里 go clean -cache 不起作用?先确认它清的是谁
GoLand 自身不维护独立的构建缓存,它调用的是你本地 Go 工具链的 go clean -cache,清理目标是 $GOCACHE(默认为 $HOME/.cache/go-build)。但很多人执行后没提速,是因为:改了 CGO_ENABLED、切了 GOOS 或升级了 Go 版本,而旧缓存里混着不同构建模式的 .a 文件,go clean -cache 只删目录,不校验兼容性。
验证是否真清干净:
- 运行 go env GOCACHE 确认路径
- 执行 go clean -cache
- 再跑 ls -la $(go env GOCACHE) | head -n 5,应为空或仅剩顶层目录结构
若仍卡顿,大概率是缓存没被真正复用——检查你是否在 GoLand 设置里关了「Use compiler cache」(Settings → Go → Build Tags & Vendoring),或启用了「Build tool: Legacy GOPATH mode」,这会让 GoLand 绕过 $GOCACHE 直接用 $GOPATH/pkg。
GoLand 的 “Clean” 菜单为什么删不掉模块缓存
GoLand 界面里的 Clean Project(Cmd+Shift+O / Ctrl+Shift+O)只清理 IDE 自己的索引和编译产物(如 .idea/ 下的 compile-server),它完全不碰 $GOMODCACHE(即 $GOPATH/pkg/mod)。模块缓存损坏导致 go mod verify 失败、拉错私有模块、checksum mismatch 报错,这些都得靠命令行手动清。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
必须用终端执行:
- go clean -modcache:删整个模块缓存,下次 go build 重下所有依赖
- 若只想清某模块(比如 git.internal.company.com/mylib),直接 rm -rf $GOPATH/pkg/mod/cache/download/git.internal.company.com
- 清完立刻跑 go build -v ./...,观察每行开头的 Fetching,确认拉取地址是你预期的代理或仓库
GoLand 启动慢、索引卡顿,其实是模块缓存太大拖累
GoLand 在打开项目时会扫描 $GOPATH/pkg/mod 下所有模块源码来构建符号索引。如果这个目录常年没清理,动辄几十 GB,IDE 就会反复扫描、卡住 UI、甚至 OOM。这不是 Go 编译慢,是 IDE 的 I/O 压力。
安全清理建议:
- 关闭 GoLand
- 运行 go clean -modcache(别用 rm -rf $GOPATH/pkg/mod,会误删 bin/ 里的 gopls 等工具)
- 若你从不用 go install,再补一句 rm -rf $GOPATH/bin
- 重启 GoLand,首次加载会慢(要重建索引),但后续就轻快了
- 长期建议:在 GoLand 的 Settings → Go → GOPATH 里,把 GOPATH 设为专用路径(如 ~/go-dev),避免和旧项目混用
CI 构建 + GoLand 本地开发,缓存策略要分开管
你在 CI 里跑 go clean -modcache 是对的,防止跨构建污染;但在本地 GoLand 开发中,频繁全量清理反而拖慢迭代。更合理的做法是分层管理:
- $GOCACHE:每天下班前执行一次 go clean -cache,尤其当你切了 CGO_ENABLED 或 GOOS
- $GOMODCACHE:每月或磁盘告警时执行 go clean -modcache,或用 go mod graph | awk '{print $1}' | sort -u > used.txt + 手动删未引用的私有域名缓存
- GoLand 自身缓存:Settings → System Settings → Cache → Click “Clear”(清 IDE 索引),不涉及 Go 工具链
真正容易被忽略的是:GoLand 默认启用「Build on save」,每次保存都触发 go build,如果缓存没配好,它就在后台反复拉包、解压、编译——看着 CPU 飙高,实际啥也没干成。










