根本原因是默认代理proxy.golang.org在国内不可达,应设GOPROXY=https://goproxy.cn,direct并启用GO111MODULE=on,Iris v12+须用/v12路径导入且安装命令带@latest版本后缀。

直接跑不起来,八成是模块代理或版本导入写错了。Iris 从 v12 开始强制要求用 v12 子路径导入,且默认启用 Go modules,不配代理在国内基本无法完成安装。
go get 安装失败:golang.org/x/… 拒绝连接
这是最常见卡点,错误信息里出现 golang.org/x/net/publicsuffix 或类似路径,说明 go 在尝试直连 Google 域名——国内不可达。
- 必须提前配置模块代理:
go env -w GOPROXY=https://goproxy.cn,direct - 同时开启 modules:
go env -w GO111MODULE=on - 安装命令要带版本后缀:
go get github.com/kataras/iris/v12@latest(不能只写github.com/kataras/iris) - 如果已有旧项目,先删掉
go.mod和go.sum,再go mod init yourappname重新初始化
import "github.com/kataras/iris" 编译报错:package iris is not in GOROOT
这是把老教程代码直接复制导致的。v12+ 版本已废弃无版本号的导入路径,import "github.com/kataras/iris" 会去 GOROOT 找,必然失败。
- 正确写法只有这一种:
import "github.com/kataras/iris/v12" - 如果用了
iris.Default(),它内部已自动加载 logger、recover 等中间件;但生产环境建议显式调用iris.New(),自己控制中间件顺序 - 注意
app.Run()已被弃用,改用app.Listen()或app.Serve();但app.Run(iris.Addr(":8080"))仍可工作,只是日志提示 deprecated
运行后访问 localhost:8080 显示空白或 404
不是框架没启动,而是路由注册或响应方式有误。Iris 对空响应很“严格”,比如忘记写 ctx 的输出方法,或用了已移除的 API。
- 确保 handler 函数里至少调用一次
ctx.Text()、ctx.HTML()或ctx.JSON();只声明不调用等于没响应 - 检查路由是否注册在
app.Get()而非app.Handle("GET", ...)—— 后者需要手动传 method 字符串,易拼错 - 如果用了
app.RegisterView()渲染模板,确认./views目录存在且文件名后缀与注册时一致(如.html),否则ctx.View("hello.html")会静默失败 - 启动时没有报 panic 或 listen error,不代表服务就绪;可用
curl -v http://localhost:8080看真实响应头和状态码
真正容易被忽略的是:Iris 的 Context 方法多数是链式设计,但不返回 error,出错时只默默跳过或 panic。比如 ctx.Params().GetIntDefault("id", 0) 在无该参数时不会报错,但后续逻辑可能崩在别处。调试时优先加 app.Logger().SetLevel("debug"),再看终端日志里有没有 “route not found” 或 “template parse error” 这类提示。











