直接跑起来只需三步:go mod init、go get github.com/kataras/iris/v12@latest、iris.New() + app.Listen();卡住主因是未初始化模块或误用旧版上下文类型。

直接跑起来只需要三步:go mod init、go get github.com/kataras/iris/v12@latest、iris.New() + app.Listen()。卡住基本是因为模块没初始化,或用了旧版上下文类型。
go mod init 是必须的第一步
很多人执行 go run main.go 报 undefined: iris 或 cannot find package "github.com/kataras/iris/v12",不是没装 Iris,而是项目根本没进 Go Modules 体系。
- 在项目根目录运行
go mod init myapp(名称不能含空格或大写) - 再执行
go get github.com/kataras/iris/v12@latest,明确指定 v12 版本 - 检查生成的
go.mod文件里是否含类似github.com/kataras/iris/v12 v12.2.4的行,没有就重试
iris.Context 不是 *context.Context
v12 彻底改了上下文类型,照抄老教程会编译失败。
- 正确写法:
func(ctx iris.Context) { ctx.WriteString("OK") } - 错误写法:
func(c *context.Context)—— 这个context包已不导出,类型也不匹配 - 别手动 import
"github.com/kataras/iris/v12/context",v12 中它不存在
Listen() 而不是 Run()
app.Run() 在 v12 已被标记为 deprecated,后续小版本可能直接移除。
- 用
app.Listen(":8080")启动最简服务 - 等价于
app.Run(iris.Addr(":8080")),但更清晰、更推荐 - 要加调试日志?传
iris.WithLogLevel("debug")到Listen()第二个参数 - 想监听 Unix socket 或 HTTPS?得换用
iris.TLS或iris.Unix配置项,不能只改端口号
中间件顺序不能错
app.Use() 必须在所有路由注册之前,否则对已注册的路由完全无效。
- 正确顺序:初始化 app →
app.Use(...)→app.Get(...)→app.Listen(...) - 比如压缩中间件
iris.Compression默认只压 >1KB 响应体,小响应不压——容易误判“没生效”,其实是响应太小 - 局部启用?用
app.Party("/api").Use(...).Get(...)
最易被忽略的是 go.mod init 这一步,以及 iris.Context 类型变更;一旦模块没初始化或上下文类型写错,编译器直接拒绝,连运行机会都没有。


















