必须先配置代理并指定v12版本:执行go env -w GOPROXY=https://goproxy.cn,direct,再运行go get github.com/kataras/iris/v12@v12.2.5;import路径必须为github.com/kataras/iris/v12,缺/v12会误装v0导致运行时panic。

go get 失败:代理没配,模块路径错
直接 go get -u github.com/kataras/iris 在国内基本必挂,报错像 golang.org/x/net/publicsuffix: unrecognized import path 或超时连接失败。这不是你网络差,是 Go 默认代理墙导致的。
必须提前配置 GOPROXY:
go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct
然后用带版本号的安装命令,避免拉到 v0.x 旧版(v0 已废弃):
go get github.com/kataras/iris/v12@v12.2.5
注意:末尾不能漏掉 /v12,否则会装错分支;也不建议用 @master,它不稳定,CI 构建可能突然失败。
版本混淆:v12 和 v0 不兼容,别混用
IRIS 从 v12 开始彻底重构,iris.Context、app.Use 行为、中间件签名都变了。如果你看到文档里写 ctx.Write 却报 undefined,大概率是代码按 v0 写的,但装了 v12。
验证当前装的是哪个版本:
go list -m github.com/kataras/iris/v12
常见误操作:
- 项目里
import "github.com/kataras/iris"(缺/v12)→ 导入 v0,编译通过但运行时 panic - 用
go get github.com/kataras/iris→ 默认拉 v0.0.2,不是 v12 - IDE 自动补全导入路径时没选带
/v12的项,手动删掉再重输
初始化无响应:main 函数没调 app.Listen 或端口被占
写完 app := iris.New() 和路由后不加 app.Listen(":8080"),程序会静默退出——没有错误,也没有日志,就像什么都没发生。
更隐蔽的问题是端口冲突:
-
app.Listen(":8080")报address already in use,但你查netstat -ano | findstr :8080没结果?可能是 WSL2 或 Docker 占用了 Windows 主机端口 - Windows 上 IIS 或 Skype 也常默认监听 80/443,换端口如
:8081快速验证 - Mac 上
lsof -i :8080查进程,kill 掉再试
建议开发期固定用非标准端口(如 :9000),避免和本地服务撞车。
依赖注入或 MVC 报错:没启用对应模块
你照着文档写 app.RegisterDependency(...) 却提示 undefined,或者 app.ConfigureContainer 找不到——不是语法错,是 IRIS v12 默认不开启这些高级功能。
v12.2.5 起,MVC、依赖注入、validator 等需显式启用:
- 启用 MVC:
app.ConfigureContainer(func(api *api.API) { })(需先import "github.com/kataras/iris/v12/mvc") - 启用 validator:
app.Validator = validator.New(),否则binding:"required"静默失效 - 启用依赖注入字段控制(如
type MyController struct { DB *sql.DB `inject:""` }):必须调app.ConfigureContainer并注册实例
这些不是“自动加载”的特性,漏掉一行启用代码,相关功能就完全不可用,且不会报错提示。


















