go clean -cache 仅清理过期缓存,未删有效 .a 文件;彻底清空需 rm -rf $(go env GOCACHE)/*,并关闭 GoLand 自动构建与 gopls 高内存占用等协同问题。

go clean -cache 为什么清了还占空间
因为 go clean -cache 只删 $GOCACHE 下“过期”的缓存条目,不是全量清空;真正占空间的是未被标记为过期的 .a 文件,尤其在频繁改分支、切 GOOS/GOARCH 后。常见现象是磁盘没立刻释放,或 du -sh $(go env GOCACHE) 显示仍很大。
- 确认路径:先运行
go env GOCACHE,别凭印象去删 ~/Library/Caches/go-build - 彻底清空:用
rm -rf $(go env GOCACHE)/*(注意末尾/*,漏掉就白删) - Linux 下空间不释放?可能是 IDE 或 dlv 进程还拿着文件句柄,关掉 GoLand 再删,或重启终端再执行
- 清完首次
go build变慢是正常表现,不是失败——缓存重建需要时间
GoLand 自动构建怎么关才真有效
默认开启的 Build project automatically 不仅触发 go list,还会高频写 $GOCACHE,尤其在保存时顺带跑 test 或 race 检查。关不干净,缓存照涨。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- Settings → Go → Build Tags & Vendoring → 关掉
Build project automatically - Settings → Tools → File Watchers → 关掉所有
go相关 watcher(比如 go fmt、go vet) - Settings → Languages & Frameworks → Go → Language Server → 检查
build.ignore是否含/bin/、/pkg/,避免 gopls 误扫已编译产物 - 如果主要用终端调试,建议同时禁用 Settings → Go → Test → Run tests on save
gopls 内存不够导致跳转卡顿怎么办
GoLand 底层靠 gopls 提供跳转、补全、诊断,但默认只给它 512MB 内存,在 >100 module 的 monorepo 里会频繁 GC、响应延迟甚至假死。
- Settings → Languages & Frameworks → Go → Language Server → 勾选
Use language server,把Maximum memory limit改成2048(单位 MB) - 加环境变量:
GOPLS_WATCHER=fsnotify(macOS/Linux)或GOPLS_WATCHER=watchexec(Windows),防 inotify 句柄耗尽 - 别开
Index entire GOPATH(Settings → Languages & Frameworks → Go → Go Modules),这个选项已废弃但残留启用会拖垮索引 - 超大项目不要直接打开根目录,用
File → Open → 选中 go.mod 所在目录,让 GoLand 按 module 加载
为什么调高 JVM 内存后 GoLand 还卡
光改 -Xmx 不够,JVM 默认用 G1GC,而 GoLand 在大量 AST 解析和符号索引时容易触发 G1 的 mixed GC 停顿;同时 CodeCache 和 DirectMemory 不足也会导致补全卡顿、插件加载失败。
- 编辑
goland.vmoptions,把-XX:+UseG1GC换成-XX:+UseParallelGC(更稳,适合 IDE 类负载) - 加上
-XX:ReservedCodeCacheSize=2048m,否则 Protobuf/Docker 插件多时 JIT 缓存溢出 - 如果用了 Delve 调试或 gRPC 插件,加
-XX:MaxDirectMemorySize=6G - 每次改完必须
File → Invalidate Caches and Restart… → Just Restart,否则配置不生效

















