端口号和主机地址必须通过Run()或Listen()显式传入;修改端口只需替换字符串如":8080"为":3000",避免0–1023特权端口;绑定特定IP需写全地址如"192.168.1.100:8080"并确保IP存在且防火墙放行;HTTPS必须用ConfigureHost()+Run(iris.TLS(...)),不能用Listen()。

端口号和主机地址必须通过 Run() 或 Listen() 显式传入,改路由、中间件、甚至 iris.New() 后不调用启动函数,服务根本不会监听任何端口。
修改端口号:替换 ":8080" 就行,但别碰特权端口
最常见做法是把 app.Listen(":8080") 改成 app.Listen(":3000"),或把 app.Run(iris.Addr(":8080")) 中的 ":8080" 换成 ":8000"、":9001" 等任意可用端口。
- 端口号 0~1023 属于特权端口,非 root 用户运行会报
bind: permission denied - 若提示
address already in use,说明该端口被其他进程占用了,换一个再试 - 开发时用
Listen()最快;生产环境推荐Run(),它支持更多配置参数(如超时、TLS)
绑定特定 IP:写全地址,别只写端口
默认 ":8080" 相当于 "0.0.0.0:8080",监听所有网卡。要限制只响应某 IP 的请求,必须显式写出 IP:
- 改成
app.Run(iris.Addr("192.168.1.100:8080")),服务就只接受来自该 IP 的连接 - 确保该 IP 真实存在于本机网卡上,执行
ip addr可验证,否则启动失败并报listen tcp 192.168.1.100:8080: bind: cannot assign requested address - 防火墙规则也得同步放行,例如
ufw allow from 192.168.1.100 to any port 8080,否则即使服务跑起来也收不到请求
HTTPS 和自定义 listener:不能用 Listen(),必须走 ConfigureHost() + Run()
Listen() 和普通 Run(iris.Addr(...)) 都不支持 TLS 配置。启用 HTTPS 必须组合使用:
- 证书方式:用
app.Run(iris.TLS("localhost:443", "cert.pem", "key.pem")),但前提是先调用app.ConfigureHost(...)设置TLSConfig - 手动构造
http.Server:适用于需要精细控制(如GetCertificate动态加载),然后传给app.Run(iris.Server(srv)) -
cert.pem和key.pem必须是 PEM 格式、路径可读,否则进程直接 panic 退出,不会给出详细错误位置
容易被忽略的关键点
很多人在 main.go 里写了完整路由和中间件,却忘了最后一句 app.Run(...) 或 app.Listen(...) —— 这时程序运行后立刻退出,或者阻塞但无响应,查日志也没报错。Iris 不自动启动 server,这一步不是可选,是强制触发点。另外,go run . 能否成功,只取决于 main.go 是否 import 了 "github.com/kataras/iris/v12" 并调用了启动函数,和其他文件里有没有 import 完全无关。


















