go mod init 必须在项目根目录执行,否则go get会走gopath模式或报“no go files”;iris v12+强制要求module支持,需带/v12后缀并指定语义化版本,如@v12.2.11,同时确保go111module=on、goproxy正确配置。

go mod init 必须在项目根目录执行
不初始化模块,go get 会默认走 GOPATH 模式或报错“no Go files in current directory”。Iris 是 v12+ 版本,强制要求 module 支持,否则 go mod tidy 无法解析 github.com/kataras/iris/v12 的版本后缀。
常见错误现象:go get github.com/kataras/iris/v12 报错 invalid version: unknown revision v12 或直接静默失败。
- 先确保当前路径是空的或已有
main.go—— 运行go mod init myapp(模块名可任意,但建议与项目名一致) - 执行后生成
go.mod,第一行必须是module myapp,不能是module .或空 - 若已存在旧版
go.mod且含replace或错误require,先删掉重来更省事
安装 Iris 必须带 /v12 后缀和明确版本
go get github.com/kataras/iris 会失败,因为 Iris 不再维护无版本号的主干分支;也不推荐用 @master,它不稳定且可能破坏 API 兼容性。
正确做法是锁定语义化版本:
- 生产环境:用
go get github.com/kataras/iris/v12@v12.2.11(对应知识库中monitor/statsviz/go.mod实际使用的版本) - 开发阶段:用
go get github.com/kataras/iris/v12@latest,但需注意 v12.x 之间仍可能存在小版本 breaking change - 执行后检查
go.mod中是否出现类似github.com/kataras/iris/v12 v12.2.11的行,而非v0.0.0-xxx
GO111MODULE 和 GOPROXY 必须显式设置
即使 Go 1.22+ 默认开启 module,Windows 或某些 CI 环境仍可能因环境变量残留导致 go get 回退到 GOPATH 模式,结果下载不到 Iris。
临时生效最可靠:
- Linux/macOS:
GO111MODULE=on GOPROXY=https://goproxy.io go get github.com/kataras/iris/v12@v12.2.11 - Windows CMD:
set GO111MODULE=on && set GOPROXY=https://goproxy.io && go get github.com/kataras/iris/v12@v12.2.11 -
GOPROXY别用默认的direct,国内直连github.com极易超时或 404
go mod tidy 后要验证 vendor 或缓存是否干净
go mod tidy 只保证 go.mod 和 go.sum 一致,但不会自动清理本地 module 缓存里损坏或冲突的 Iris 版本。尤其当你之前试过 @master 或手动删过 $GOPATH/pkg/mod/cache 子目录时,容易出现 “类型未定义” 或 “Assets undefined” 类错误。
- 遇到编译报错如
type *blocks.Blocks has no field or method Assets,优先执行:go clean -modcache - 然后删掉项目下的
go.sum和vendor/(如有),再跑一次go mod tidy - 最后用
go list -m all | grep iris确认输出只有一行,且版本号匹配预期
/v12 这个路径片段,少一个斜杠或写成 v12.0 都会导致整个依赖图断裂。











