iris路由中带参数路径必须用冒号开头如/user/:id,不支持花括号或可选语法;参数名仅限字母、数字、下划线;取值用ctx.param("id"),大小写敏感且拼错返回空字符串。

iris 路由中怎么写带参数的路径
Iris 的路由参数必须用冒号 : 开头,比如 /user/:id 或 /post/:year/:month。它不支持 Express 那种 /user/:id?/ 可选语法,也不接受花括号(如 /user/{id}),写错会直接 404。
常见错误是把参数写成 /user/:id/(末尾带斜杠)却用 GET /user/123 请求——Iris 默认不自动忽略末尾斜杠,两者视为不同路由。
- 路径参数名只能是字母、数字、下划线,不能含连字符(
:user-id是非法的) - 多个参数之间用普通斜杠分隔,不要加空格或特殊符号
- 如果想匹配多段路径(比如
/files/a/b/c),得用通配符:path*,不是:path
在 handler 里怎么取 :id 这类参数
Iris 不通过 req.URL.Query() 或正则捕获组拿参数,而是统一用 ctx.Param() 方法。它只认路由定义里声明过的参数名,拼错或大小写不对都返回空字符串。
示例:app.Get("/user/:id", func(ctx iris.Context) { id := ctx.Param("id") }) —— 这里 "id" 必须和路由里的 :id 完全一致。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
ctx.Param("id")返回string,需要转类型时自己用strconv.Atoi()或ctx.Params().GetInt() - 不存在的参数名(如
ctx.Param("uid"))不会 panic,只返回空字符串,容易漏判,建议配合ctx.Params().Exists("id")先检查 -
:path*类型的通配参数要用ctx.Param("*")取,不是ctx.Param("path")
为什么 ctx.Param() 拿不到值?几个典型原因
最常踩的坑不是代码写错,而是请求没发到这个路由上。比如你写了 app.Get("/api/user/:id", ...),但前端发的是 GET /user/123(少了 /api 前缀),自然取不到。
- 检查实际访问的 URL 是否和路由注册的路径完全匹配(包括大小写、前导斜杠、末尾斜杠)
- 确认 HTTP 方法一致:用
app.Post()注册的路由,GET请求进不来 - 中间件提前终止了请求(比如鉴权失败调了
ctx.StopExecution()),后续 handler 根本不执行 - 路由注册顺序有影响:Iris 是按注册顺序匹配,更具体的路由(如
/user/:id)要放在更宽泛的路由(如/user/:id*)前面,否则后者会拦截前者
需要校验参数格式或范围怎么办
Iris 本身不提供参数正则约束(像 Gin 的 :id([0-9]+)),得手动做。推荐在 handler 开头集中校验,别等存库时才发现 id 是 "abc"。
简单场景用 if id == "" 或 if !isNumeric(id) 就够;复杂规则可以封装个 validateParam() 函数复用。
- 别依赖
ctx.ParamInt()自动报错——它只是包装了strconv.Atoi,出错仍返回 0 和 error,得显式判断 - 如果大量接口都需要 ID 是正整数,考虑写个共用中间件,在
ctx.Next()前统一解析并注入到ctx.Values() - 路径参数不适合传敏感信息(如 token),长度和编码也受限,这类数据该放 query 或 header










