Go模块缓存分两处:$GOPATH/pkg/mod存源码,$GOCACHE存编译中间文件;需用go env查看真实路径,清理应优先用go clean -modcache而非手动删除。
GOPATH 和 GOCACHE 共同决定Go 1.11+ 默认启用模块模式后,依赖下载和构建产物会分别存放在两个位置:$GOPATH/pkg/mod 存放已下载的模块源码(go mod download 或 go build 触发),而 $GOCACHE(默认为 $HOME/Library/Caches/go-build macOS / $HOME/.cache/go-build Linux / %LocalAppData%\go-build Windows)存放编译中间对象(如 .a 文件)。两者不可混淆——删错位置会导致重复下载或重编译。
go env 查看真实缓存路径直接运行命令获取当前环境下的实际路径,避免手动拼接出错:
go env GOPATH GOCACHE GOPROXY
重点关注输出中的:
GOPATH:若未设置,默认是 $HOME/go;其子目录 pkg/mod 就是模块源码缓存根目录GOCACHE:编译缓存路径,影响 go test -count=1 等是否命中缓存GOPROXY:确认是否走代理,影响 pkg/mod/cache/download/ 下的归档包来源pkg/mod 目录结构不是扁平的,带校验和与版本重写在 $GOPATH/pkg/mod 下看不到干净的 github.com/user/repo@v1.2.3 目录。真实结构是:
cache/download/ 下,文件名含校验和(如 github.com/user/repo/@v/v1.2.3.zip 和 .info、.mod)github.com/user/repo@v1.2.3-0.20250101000000-abcdef123456,其中时间戳+提交哈希是 go 自动生成的伪版本(pseudo-version)github.com/user/repo@v1.2.3 指向上述伪版本目录,供 go list -m all 等命令识别这意味着不能靠「删掉某个版本文件夹」来清理特定模块——必须用 go clean -modcache,否则可能破坏模块完整性。
rm -rf pkg/mod
手动删除 pkg/mod 虽然能清空,但下次 go build 会重

replace 或 require ./local 的软链接状态。更稳妥的方式是:
go clean -modcache(推荐,保留 GOCACHE 编译结果)go clean -cache
go clean -modcache -cache
go mod download -json github.com/user/repo@v1.2.3 先确认存在,再进 pkg/mod/cache/download/ 手动删对应 zip/info/mod,但不建议常规操作缓存路径本身不常变,但 GO111MODULE=off 时模块机制失效,pkg/mod 不会被使用——检查 go env GO111MODULE 是基础动作。