真正有效的清理命令只有go clean -modcache,它安全、幂等地清空$GOMODCACHE中的模块缓存,不影响go.mod、go.sum或vendor,后续构建按需下载缺失或校验失败的模块。

Go 模块缓存损坏是 go get github.com/kataras/iris/v12 失败最常被忽略的根因——不是网络问题,也不是版本冲突,而是 go/pkg/mod/cache 里残留了不一致的校验信息或半截下载的包。
为什么 go clean -modcache 有时不管用
它只清空模块缓存目录,但不会重置 go.mod 中已记录的 checksum(sumdb 验证失败时会卡住),也不会清理 GOPROXY 缓存层(如 proxy.golang.org 的 CDN 节点)。常见现象是:重复执行 go get 报同一行错误 verifying github.com/kataras/iris/v12@v12.2.0: checksum mismatch。
- 先手动删掉
$GOPATH/pkg/mod/cache/download/github.com/kataras/iris下对应子目录(保留v12版本号路径) - 再运行
go env -w GOSUMDB=off临时关闭校验(仅调试用,验证通过后务必go env -w GOSUMDB=sum.golang.org恢复) - 最后加
-x参数重试:go get -x github.com/kataras/iris/v12@latest,观察实际 fetch 和 unpack 步骤是否卡在 proxy 或本地解压
go.mod 里残留旧引用导致安装中断
如果你之前用过 v11 或未带 /v12 后缀的导入路径,go.mod 可能还存着 github.com/kataras/iris v11.2.8+incompatible 这类条目。Go 会拒绝自动升级到 v12,因为 major version 变更必须显式声明。
- 打开
go.mod,删掉整行github.com/kataras/iris相关依赖 - 执行
go mod tidy,此时会报错 “require github.com/kataras/iris: version "v12.x.x" invalid: module contains a go.mod file, so major version must be compatible” - 改用带版本后缀的导入:
go get github.com/kataras/iris/v12@latest,它会自动写入github.com/kataras/iris/v12 v12.2.0
代理和网络配置干扰安装流程
国内用户常设 GOPROXY=https://goproxy.cn,但它对 v12 的模块索引更新有 1–4 小时延迟,而 iris/v12 发布后立即推送到官方 proxy,容易出现「本地查不到新 tag」的假失败。
- 临时切回官方代理:
go env -w GOPROXY=https://proxy.golang.org,direct - 确认
GO111MODULE=on已启用(go env GO111MODULE输出应为on) - 避免混用
go install和go get:Iris 是库不是命令行工具,不要跑go install github.com/kataras/iris/v12@latest
真正麻烦的不是删缓存,而是 go.sum 里某一行 checksum 错误却没报出来——它可能藏在几十行依赖中,只在你 go build 时才触发校验失败。建议每次清理后,用 go list -m all | grep iris 确认输出只有且仅有 github.com/kataras/iris/v12 v12.2.0 这一条。











