Iris框架跑不起来主因是未启用Go Modules、未锁定/v12版本、未调用app.Run()启动服务;“package not found”实为模块未生效,需检查go.mod、使用/v12后缀、确认GOPROXY支持v12。

装完 github.com/kataras/iris/v12 后跑不起来?不是代码错,是三处关键动作漏了:没启服务、没锁版本、模板路径静默失败。
go get 后报 “package not found” 怎么办
根本不是没下载成功,而是 Go Modules 没生效或版本没对齐。
- 检查项目根目录下有没有
go.mod文件;没有就先执行go mod init your-project-name -
go get必须带/v12后缀:go get github.com/kataras/iris/v12@latest,只写github.com/kataras/iris会 fallback 到旧版或失败 - 用
go list -m all | grep iris确认实际加载的模块名和版本,避免本地缓存了 v11 的 commit - 如果走代理,确认
GOPROXY支持 v12 模块(比如https://goproxy.io或https://goproxy.cn都可以)
app.Run() 后浏览器打不开 8080
Iris 不自动启动 HTTP server,iris.New() 只是初始化一个实例,不监听端口。
- 必须显式调用
app.Run(iris.Addr(":8080"))(v12+ 推荐)或app.Listen(":8080")(旧习惯) - 如果进程秒退,说明没调
Run/Listen,或者main()执行完就退出了 - 用了 TLS 或自定义
http.Server?那得用app.ConfigureHost(),否则配置不生效
ctx.Params().Get("id") 总是空字符串
不是路由没匹配,是参数获取方式错了——ctx.URLParam() 和 ctx.Params().Get() 完全不同用途。
立即学习“go语言免费学习笔记(深入)”;
- 路径参数(如
/user/{id:uint64}中的id)必须用ctx.Params().Get("id") -
ctx.URLParam("id")只取 query string(比如/user?id=123) - 参数名大小写敏感,且必须和路由定义中完全一致;拼错返回空字符串,不会 panic,容易漏判
- 类型断言要自己做:
id, _ := strconv.ParseUint(ctx.Params().Get("id"), 10, 64)
模板渲染失败但程序不报错
这是 Iris 的静默失败设计:模板注册出错时默认不 panic,只在 debug 日志里埋一条提示。
- 启动前加
app.Logger().SetLevel("debug"),否则看不到加载失败原因 -
iris.HTML("./views", ".html")中的./views是相对于go run所在目录,不是main.go文件位置 - 后缀必须和文件真实扩展名严格一致:
.html不会匹配index.htm,也不忽略大小写 - 别用
filepath.Join动态拼路径传给iris.HTML(),它只接受字符串字面量路径
最常被忽略的是中间件里 ctx.Next() 的执行时机——它不阻断后续代码,写响应后忘了 ctx.StopExecution(),业务逻辑照样往下走。这种 bug 很难复现,但线上可能造成鉴权绕过或重复写响应。


















