go clean -cache 清 $GOCACHE 中的编译中间产物(.a 文件),用于加速构建,但切换 CGO_ENABLED、GOOS/GOARCH、升级 Go 版本或修改 Cgo 时需手动清理,否则导致逻辑未更新或链接错误;go clean -modcache 清 $GOMODCACHE 中模块源码和校验数据,仅在 GO111MODULE=on 时生效。

GoLand 本身不管理 Go 缓存,它只是调用 go 命令;清理缓存必须用 go clean 系列命令,而不是在 IDE 里点“清除索引”就能解决构建异常或代码不生效的问题。
go clean -cache 清什么、什么时候必须清
go clean -cache 删除的是 $GOCACHE 目录下的编译中间产物(主要是 .a 文件),不是源码,也不是模块。这些文件让 go build 和 go test 跳过重复编译,但一旦你:
- 切换了
CGO_ENABLED(比如从1改成0) - 变更了
GOOS或GOARCH(比如本地开发是darwin/amd64,CI 构建是linux/arm64) - 升级了 Go 版本(例如从 1.25 升到 1.26)
- 改了 Cgo 的头文件或链接参数
旧缓存就可能被错误复用,导致「函数逻辑变了但行为没变」「undefined symbol 链接错误」等静默问题。这时 go clean -cache 是最直接的解法。
注意:go clean -cache 不需要进项目目录,全局生效;执行后首次构建会明显变慢,属正常现象。
go clean -modcache 不等于删掉所有依赖,而是重置模块缓存
go clean -modcache 清的是 $GOMODCACHE(默认为 $GOPATH/pkg/mod),即所有已下载并解压的模块源码、.zip 包和校验数据。它和你在 $GOPATH/src 下手动 git clone 的项目完全无关。
常见触发场景:
-
go list -m all显示的版本和go.mod对不上 - 报
checksum mismatch且go mod verify失败 - 切换了私有代理(如从
goproxy.cn切到自建GOPROXY),怀疑缓存混入不同来源的同版本模块
关键限制:go clean -modcache 只在 GO111MODULE=on 时生效;如果设了 GOMODCACHE=off 或 GO111MODULE=off,这条命令静默无效。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
GoLand 里“重建索引”只影响 IDE 自身语义分析,不碰 Go 缓存
GoLand 的「重建索引」(File → Reload project 或 File → Invalidate Caches and Restart → Invalidate and Restart)只刷新 IDE 内部的符号数据库、跳转、补全和高亮能力,和 $GOCACHE、$GOMODCACHE 完全无关。
它解决的是这类问题:
- 刚拉完新分支,结构体字段跳转失效
- 重命名后引用仍标红,但实际能编译通过
- 新增的
go.mod依赖没出现在 import 补全列表里
但如果你遇到「改了函数体,go run main.go 还是跑旧逻辑」,那一定是 $GOCACHE 没清干净,不是索引问题。
想精准删某个模块缓存?别用 go clean -modcache,手动删目录
go clean -modcache 是全量清理,CI 或多项目共用缓存时很浪费——它会强制重下几十个无关依赖。真正要重拉某一个模块(比如 github.com/gin-gonic/gin@v1.9.1),应该:
- 确认路径:
go env GOMODCACHE(通常为$GOPATH/pkg/mod) - 删对应目录:
rm -rf $GOMODCACHE/github.com/gin-gonic/gin@v1.9.1 - 删缓存校验条目:
rm -rf $GOMODCACHE/cache/download/github.com/gin-gonic/gin/@v/v1.9.1.* - 再执行:
go mod download github.com/gin-gonic/gin@v1.9.1
注意:版本号必须完全一致(v1.9.1 和 v1.9.1+incompatible 是两个独立目录);Windows 用户用 rd /s /q 替代 rm -rf,路径分隔符为 \。
最容易被忽略的是:删完模块目录后,go.sum 不会自动更新,得手动跑 go mod verify 确认校验和一致——否则下次 go build 可能因 checksum 不匹配而失败。

















