Fiber原生支持单路由多命名参数,如/post/:year/:month/:slug,按路径段顺序绑定值;参数名大小写敏感且不可跳段;StrictRouting默认开启,要求路径完全匹配;参数无内置校验,需手动处理。

路径中连续写多个 :name 就能匹配多个参数
不需要额外配置或插件,Fiber 原生支持在单个路由字符串里声明多个命名参数,只要用 /a/:x/b/:y/c/:z 这种格式即可。引擎会按顺序把 URL 路径段一一绑定到对应参数名上。
- 路由定义必须显式写出每个
:param,比如app.Get("/post/:year/:month/:slug", h) - 请求
/post/2024/10/hello-world→c.Params("year")得"2024",c.Params("month")得"10",c.Params("slug")得"hello-world" - 参数名大小写敏感:
:Slug和:slug是两个键,拼错就取不到值 - 不能跳段:如果只注册了
/post/:year/:slug,但请求是/post/2024/10/hello,则第 2 段"10"会被忽略,c.Params("slug")实际得到"10",而"hello"完全不匹配
c.ParamsValues() 比循环调 c.Params() 更安全高效
当路由含 3 个以上参数时,逐个调 c.Params("a")、c.Params("b") 不仅啰嗦,还容易漏判空值或写错名。直接用 c.ParamsValues() 一次性取全部值,返回 []string,顺序与传入参数名一致。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 正确用法:
vals := c.ParamsValues("year", "month", "slug")→ 得到[]string{"2024", "10", "hello-world"} - 任意一个参数未匹配(如请求是
/post/2024),对应位置返回空字符串"",不会 panic - 不能省略参数名调用:
c.ParamsValues()返回空切片,不是所有参数列表 - 不支持通配参数
*或可选参数?的批量提取,它们仍需单独用c.Params("*")或判空处理
末尾多斜杠、大小写、StrictRouting 会直接导致匹配失败
Fiber 默认开启 StrictRouting = true,这意味着路径必须完全一致才命中路由。哪怕只多一个 /,或者大小写差一点,都会 404。
- 注册了
/user/:id,请求/user/123/→ 不匹配,返回 404 - 注册了
/User/:ID,请求/user/123→ 不匹配(大小写敏感) - 想兼容末尾斜杠?别关
StrictRouting(会引发/users和/users/:id冲突),而是显式加路由:app.Get("/user/:id/", h) - 所有参数节点都是“段级”匹配,
/a/:x/b/:y中的b是静态段,必须原样存在;少一个b,整个路由就不生效
没有内建校验,数字/格式限制得自己做
Fiber 的 :param 只是占位符,不校验内容。/user/abc 和 /user/123 都能匹配 /user/:id,你得手动判断。
- 要确保
id是数字?用strconv.Atoi(c.Params("id")),出错就返回 400 - 想用正则约束?Fiber 不支持
:id(\d+)这种语法(那是 Vue Router 的写法),只能在 handler 里regexp.MatchString(`^\d+$`, c.Params("id")) - 多个参数都要校验?建议封装一个校验函数,避免重复写
if x == "" { return c.Status(400).SendString("missing x") } - 别指望基数树自动过滤——radix tree 只负责前缀导航和参数绑定,不介入业务逻辑


















