iris 中 app.get() 是注册 get 路由首选方式,需用 iris.context 类型、注意别名唯一性、参数强类型约束,分组用 party(),动态注册须在 beforeactivation 钩子中通过 router 调用 get() 并设执行规则。

直接用 app.Get() 注册最简单
绝大多数场景下,app.Get() 就是注册 GET 路由的首选方式。它接受路径、处理函数、可选别名三个参数,签名清晰,语义明确。
常见错误是把上下文类型写成 *context.Context —— Iris v12 的正确类型是 iris.Context,否则编译直接报错。
app.Get("/health", func(ctx iris.Context) { ctx.WriteString("OK") })- 带 URL 参数:
app.Get("/user/{id:int}", func(ctx iris.Context) { id := ctx.Params().GetInt64Default("id", 0) }) - 加别名(用于反向生成 URL):
app.Get("/users/{id}", userHandler, "user.detail"),别名重复会 panic
想分组管理?用 Party() 再调 Get()
当多个路由共享前缀(比如 /api/v1)或需要统一中间件时,Party() 是标准做法。它返回一个子路由器,后续所有 Get() 都自动挂载到该分组下。
注意:子路由不继承父级中间件,必须显式调用 Use();且 Party() 后的大括号只是语法糖,不是作用域隔离。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
-
api := app.Party("/api")→api.Get("/users", handler)对应路径是/api/users - 局部中间件:
admin := app.Party("/admin").Use(authMiddleware)→admin.Get("/dashboard", handler) - 嵌套分组也合法:
v1 := app.Party("/api/v1").Use(logMiddleware)→v1.Get("/posts", handler)
需要在激活前定制路由?必须用 BeforeActivation
这个钩子只在应用初始化完成、但所有路由尚未注册时触发,适合做动态路由注入、权限路由预生成等高级操作。但它不是“另一个注册方式”,而是一个严格时机受限的扩展点。
关键约束:只能通过传入的 router 参数调用 Get(),绝不能用 app.Get();且必须手动调用 router.SetExecutionRules(),否则中间件和依赖注入可能失效。
- 错误写法:
app.Get("/debug", debugHandler)放在BeforeActivation里 → 路由注册到默认 router,不生效 - 正确写法:
router.Get("/health", healthHandler)+router.SetExecutionRules(...) - 时机判断:必须在
app.Run()或app.Listen()之前注册该钩子,启动后再设就晚了
别名和参数规则容易踩坑
别名不是装饰,而是 URL 反向生成的唯一键;参数类型约束也不是可选功能,而是解析失败时的兜底行为。这两处不按规范来,线上就容易 404 或 panic。
- 别名必须全局唯一,含空格或点号(如
"user.list.v1")合法,但"user list"会 panic -
{id:int}表示强类型参数,请求带非数字值时直接 404;若想宽松匹配,改用{id}+ 手动校验 - 生成 URL 时用
c.Router().URI("user.detail", iris.Map{"id": 123}),别名拼错或参数名不一致会导致空字符串
Get() 看似简单,但别名唯一性、参数类型强制、BeforeActivation 的 router 绑定、以及中间件作用域这些点,一旦忽略,调试成本远高于写几行代码。










