路径必须以/开头,否则路由失效;:id仅捕获单段,不跨斜杠;通配符*path须独占末尾;可选参数用?id且仅限末尾;StrictRouting关闭会导致:id被静态路径拦截。

路径开头必须带 /,否则参数路由直接失效
漏掉前导斜杠是新手最常踩的坑。写成 app.Get("users/:id", h) 看似合理,但 Fiber 完全不会匹配 GET /users/123 —— 因为它只注册了一个无前缀的、无法被任何 HTTP 请求命中路径。必须显式写成 app.Get("/users/:id", h)。
这个斜杠不是风格问题,而是路由树构建的根节点标识。Fiber 的内部路由解析器从 / 开始分段,没有它,整个路径就失去锚点。
:id 这种语法只捕获单一段,不能跨斜杠吞路径
Fiber 的参数占位符是严格分段的,:id 只取当前路径段的内容,不会“吃掉”后面的部分。比如:
-
app.Get("/posts/:id/comments", h)→ 请求GET /posts/123/comments时,c.Params("id")是"123",不是"123/comments" -
app.Get("/files/:user/*path")会启动 panic:invalid pattern,因为通配符*path和参数:user不能共存于同一级路径
如果真需要捕获剩余路径,只能把通配符放到末尾且单独使用:app.Get("/static/*path", h),此时 c.Params("*path") 才能拿到完整后缀。
可选参数必须用 ?name 且只能放在末尾
别写 /:id? 或 /:id?name —— 这两种都是非法语法,应用启动时直接 panic。
正确写法是 ?name 作为独立段,紧贴在斜杠之后、路径末尾之前:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
app.Get("/user/:id?name", h)→ 匹配/user/123和/user/123/john -
c.Params("name")在前者中返回空字符串"",不是nil,所以判断必须用c.Params("name") == "" - 多个可选段只能线性追加:
/:a/:b?c?d合法,/:a?b?c非法
注意:未提供的可选参数不会影响路由匹配成功与否,但会改变路径段数,间接影响同级其他路由的优先级判断。
StrictRouting 关闭后,:id 路由可能被静态路径拦截
默认 StrictRouting: true 时,/users 和 /users/:id 是明确区分的:前者匹配 GET /users,后者匹配 GET /users/42。
一旦设为 false,Fiber 会把 /users/42 同时视为 /users 的子路径,导致 app.Get("/users", h1) 拦截本该进 app.Get("/users/:id", h2) 的请求 —— 此时 c.Params("id") 根本拿不到值。
真正稳妥的做法是显式覆盖两种形态:app.Get("/users", h1) 和 app.Get("/users/:id", h2) 同时存在,并保持 StrictRouting: true(默认值)。










