必须先执行go mod init和go get iris/v12,再用iris.new()创建实例;否则因模块未初始化或版本错误导致panic,且v12中上下文类型为iris.context而非*context.context。

直接上手就能跑,不需要额外配置,但版本和模块初始化顺序错了就 panic。
用 iris.New() 创建实例前必须确认 Go 模块已正确初始化
很多人执行 go run main.go 报错 undefined: iris 或 cannot find package "github.com/kataras/iris/v12",根本原因不是没装 Iris,而是项目没走 Go Modules 流程。
- 先在项目根目录运行
go mod init your-app-name(名称随意,但不能含空格或大写) - 再执行
go get github.com/kataras/iris/v12@latest,明确指定 v12 版本,避免拉到不兼容的 master 分支 - 检查生成的
go.mod文件里是否包含类似github.com/kataras/iris/v12 v12.2.4的行,没有就重试
app.Listen() 和 app.Run() 别混用,新版推荐 Listen
Iris v12 中 app.Run() 已被标记为 deprecated,继续用可能在后续小版本里移除。官方示例和文档都统一转向 app.Listen()。
-
app.Listen(":8080")是最简启动方式,等价于app.Run(iris.Addr(":8080")) - 如果要加调试日志,用
app.Listen(":8080", iris.WithLogLevel("debug")) - 监听 Unix socket 或 HTTPS?得换用
iris.TLS或iris.Unix配置项,不能只改端口号
路由注册别漏掉 ctx 类型声明,否则编译失败
常见错误是照抄旧教程写 func(context *context.Context),但 Iris v12 的上下文类型是 iris.Context,不是 *context.Context —— 后者属于已废弃的低层封装,且包路径也变了。
- 正确写法:
app.Get("/", func(ctx iris.Context) { ctx.WriteString("OK") }) - 错误写法:
func(c *context.Context)(会报undefined: context或类型不匹配) - 别手动 import
"github.com/kataras/iris/v12/context",v12 已不导出该包
中间件注册顺序影响行为,app.Use() 必须在路由前
比如你想给所有接口加压缩,但把 app.Use(iris.Compression) 放在 app.Get() 后面,那这个 GET 路由就完全不会被压缩 —— 中间件只对它之后注册的路由生效。
- 正确顺序:初始化 app → 注册全局中间件 → 注册路由 → 启动监听
- 想局部启用中间件?用
app.Party("/api").Use(...).Get(...) -
iris.Compression默认只压缩 >1KB 的响应体,小响应不压,这点容易误判效果
最易被忽略的是 go.mod 初始化这一步,很多新手卡在“明明装了 Iris 却找不到包”,其实根本没进 Modules 体系;另外 v12 的 iris.Context 类型和旧版差异较大,强行沿用老代码结构会导致编译器直接拒绝,而不是运行时报错。











