跑通iris首个项目只需三步:go mod init初始化模块、go get安装v12依赖、handler中使用iris.context类型;其余问题多源于这三点未落实。

直接跑通 Iris 第一个项目,核心就三件事:模块初始化、依赖安装、上下文类型写对。其他任何卡住,基本都绕不开这三点。
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.11的行,没有就重试
iris.Context 不是 *context.Context,类型错就编译不过
Iris v12 彻底弃用了旧版 *context.Context,所有 handler 函数签名必须用 iris.Context。照抄老教程会直接编译失败。
- 正确写法:
func(ctx iris.Context) { ctx.WriteString("OK") } - 错误写法:
func(c *context.Context)——这个context包已不导出,类型也不匹配 - 别手动
import "github.com/kataras/iris/v12/context",v12 中它不存在
Listen(":port") 替代 Run(),参数顺序影响调试和协议支持
app.Run() 在 v12 已被标记为 deprecated,后续小版本可能直接移除。用 app.Listen() 启动最简服务更稳妥。
- 等价但更推荐:
app.Listen(":8080"),比app.Run(iris.Addr(":8080"))更清晰 - 要加调试日志?传
iris.WithLogLevel("debug")到Listen()第二个参数 - 想监听 HTTPS 或 Unix socket?得换用
iris.TLS或iris.Unix配置项,不能只改端口号
中间件注册顺序必须在路由之前
app.Use() 必须在所有 app.Get()、app.Post() 等路由注册之前调用,否则对已注册的路由完全无效。
- 正确顺序:
app := iris.New()→app.Use(...)→app.Get(...)→app.Listen(...) - 比如
iris.Compression默认只压缩 >1KB 的响应体,小响应不压——容易误判“没生效”,其实是响应太小 - 局部启用?用
app.Party("/api").Use().Get()
最易被忽略的是 go.mod init 这一步,以及 iris.Context 类型变更;一旦模块没初始化或上下文类型写错,编译器直接拒绝,连运行机会都没有。











