c.Params()是读取路径参数的唯一正确方式,其他方法无法获取;路径参数需在路由中显式声明如:id,未声明则返回空;通配符和+需用c.Params("")、c.Params("+")获取;返回值生命周期短,需拷贝或启用Immutable配置;路径参数与查询参数完全隔离。

c.Params() 是唯一正确方式,其他方法(如 c.QueryParam()、c.FormValue())完全无法读取路径参数,强行混用必为空。
路径参数必须显式声明才能被 c.Params() 读到
路由字符串里没写 :id 或 :name,c.Params("id") 永远返回空字符串。Fiber 不做“自动识别”,只按你写的模式提取。
-
app.Get("/users/:id", handler)→ 可用c.Params("id") -
app.Get("/users", handler)→c.Params("id")返回"",哪怕请求是/users/123 -
app.Get("/posts/:year/:month", handler)→ 需分别调用c.Params("year")和c.Params("month")
通配符 * 和加号 + 的参数怎么取
它们属于未命名参数,不能用名字索引,得用特殊键获取:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
app.Get("/files/*", handler)→ 用c.Params("*")读剩余全部路径 -
app.Get("/user/+", handler)→ 用c.Params("+")读贪婪匹配段(必须非空) -
app.Get("/v1/*path", handler)→ 仍用c.Params("*"),不是c.Params("path")
c.Params() 返回的值生命周期极短
它指向内部缓冲区,handler 返回后内存可能被复用。若需长期持有,必须拷贝:
- 直接赋值
id := c.Params("id")→ 后续使用不安全 - 安全做法:用
utils.CopyString(c.Params("id"))或手动copy()字节切片 - 全局启用
Immutable: true配置可避免拷贝,但有轻微性能开销
最容易被忽略的是:路径参数和查询参数(?id=123)完全隔离,c.Params("id") 永远读不到 URL 查询串里的 id,哪怕名字一样。别指望它“智能合并”。


















