Iris中获取路径参数必须用ctx.Param("name"),大小写敏感且未定义时返回空字符串;批量读取用ctx.Params().Get("name");参数均为string类型,需手动转换并校验错误。

iris.Context.Param() 获取单个路径参数
在 Iris 路由中定义带命名参数的路径(如 /user/:id 或 /post/:year/:month),必须用 ctx.Param() 读取,不能用 query 或 form 方法。Iris 不会把路径参数自动注入到 ctx.URLParam() 或 ctx.FormValue() 中。
常见错误是写成 ctx.URLParam("id") —— 这只会查 URL 查询字符串(?id=123),对 /user/123 返回空字符串。
-
ctx.Param("id"):正确,从路由匹配中提取:id -
ctx.Param("ID"):大小写敏感,:ID和:id是不同参数 - 如果参数未定义(比如路由是
/user/:id但请求了/user),ctx.Param()返回空字符串,不会 panic
iris.Context.Params() 批量读取所有路径参数
当路由含多个命名段(如 /api/v1/users/:userID/posts/:postID)时,ctx.Params() 返回一个 iris.Params 类型(本质是 []iris.Parameter),可遍历或按名查找。
注意它不是 map,不能直接 ctx.Params()["userID"];得用 ctx.Params().Get("userID") 或循环比对 .Key 字段。
-
ctx.Params().Get("userID"):安全获取,不存在时返回空字符串 -
ctx.Params().Len():返回实际匹配到的参数个数,可用于校验 - 不建议手动转 map:路径参数顺序隐含语义(如
:year/:month/:day),丢掉顺序可能掩盖逻辑错误
类型转换要自己做,Iris 不自动解析
ctx.Param() 总是返回 string,即使你期望的是整数或 UUID。Iris 不提供 ParamInt() 或 ParamUUID() 这类封装函数,必须手动转换并处理错误。
典型场景是 ID 参数需要转 int64 或 uint,但用户可能传 /user/abc 导致 strconv.ParseInt() 失败。
- 别跳过错误检查:
id, err := strconv.ParseInt(ctx.Param("id"), 10, 64)后必须判断err != nil - 对 UUID,用
uuid.Parse(),失败时应返回ctx.StatusCode(400)而非 500 - 避免在 handler 开头就 panic:路径参数非法属于客户端错误,不该触发服务端崩溃
嵌套路由和通配符参数的注意事项
Iris 支持 :id(单段)和 *path(通配符,匹配剩余路径),但二者行为差异大。*path 会吃掉斜杠,而 :id 不会。
例如路由 /static/*filepath 匹配 /static/js/app.js 时,ctx.Param("filepath") 返回 "js/app.js"(含斜杠);但 /file/:name 匹配同路径时,:name 只能是 "app.js"。
- 通配符参数名必须是
*xxx,不能写成:filepath或**filepath - 一个路由最多一个
*xxx,且必须在末尾 - 嵌套路由组(
app.Party("/admin"))不影响参数提取逻辑,ctx.Param()始终基于完整匹配路径
:id 允许任意非斜杠字符串;真正需要约束时,得靠正则路由(/:id regexp(^[0-9]+$))或手动验证,这点容易被忽略。


















