必须先执行 go mod init 初始化模块,再用 go get github.com/kataras/iris/v12@latest 显式指定 v12 版本;import 路径须为 github.com/kataras/iris/v12,否则加载 v11 导致路由、参数、中间件等全部不兼容。

直接用 go get 引入 github.com/kataras/iris/v12 就行,但必须配对 go mod init,否则会报错或导入旧版 v11。
go mod init 是前提,不能跳过
Iris v12 要求模块路径明确,不支持 GOPATH 模式。没初始化模块就 go get,Go 会默认降级到 v11(带 +incompatible),后续路由写法、参数取值全错。
- 先执行
go mod init myapp(myapp替换为你自己的模块名) - 检查生成的
go.mod文件第一行是否为module myapp,不是则手动修正 - 确保当前目录是模块根目录,
go list -m应返回你的模块名
go get 命令要带版本号,别信“latest”
go get github.com/kataras/iris 默认拉的是 v11,因为仓库主分支已切到 v12,但 Go 的语义化版本解析规则会让它 fallback。必须显式指定 /v12。
- 正确命令:
go get github.com/kataras/iris/v12@latest - 如果卡住或超时,先设代理:
go env -w GOPROXY=https://goproxy.cn,direct - 成功后
go.mod里应出现类似github.com/kataras/iris/v12 v12.2.4的行,不含+incompatible
import 路径必须和模块名一致
代码里写 import "github.com/kataras/iris" 会编译失败——v12 的 import path 就是 github.com/kataras/iris/v12,少一个 /v12 都不行。
- 正确写法:
import "github.com/kataras/iris/v12" - IDE(如 GoLand)提示报红?重启 IDE 或执行
go mod tidy同步依赖 - 若仍提示找不到
iris.Context等类型,说明实际加载的仍是 v11,回退检查前两步
v12 的路由参数语法(如 /user/:id)、中间件注册方式(app.Use vs app.Get(..., middleware, handler))和 v11 不兼容,一步错,后面全崩。最常被忽略的是:没删干净旧缓存的 go.sum 或残留的 vendor 目录,会导致 go build 表面成功,运行时 panic。











