路径参数必须显式声明为:name形式且带前导斜杠,否则c.Params()为空;可选段仅支持/path/:param?末尾语法;通配符用c.Params("*");子路径、StrictRouting等均严格匹配字符。

路径参数必须在路由字符串里显式声明,否则 c.Params() 永远拿不到值。
为什么 c.Params("id") 总是空字符串?
根本原因不是代码写错,而是路由没声明参数节点。Fiber 不会自动从路径里“猜”哪些段是参数——它只认你在注册时写明的 :name 或 *wildcard。
-
app.Get("/user/123", handler)→c.Params("id")返回空,因为没声明:id -
app.Get("/user/:id", handler)→c.Params("id")正确返回"123" -
app.Get("/files/*", handler)→ 必须用c.Params("*")取值,不是c.Params("path") - 写成
/user/{id}或/user/:id/会直接 404,Fiber 只识别:name形式且不接受结尾斜杠混入参数声明
app.Get() 路径开头的斜杠不能省
所有 app.Method() 的路径参数必须带前导 /,漏掉就完全匹配不上。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
app.Get("users", handler)→ 永远不会响应GET /users,启动时也不报错,但请求全 404 -
app.Get("/users", handler)→ 正常工作 - 子路径也一样:
app.Post("/api/v1/login", handler)合法;app.Post("api/v1/login", ...)无效
可选路径段怎么写:用 ?,但只能放在末尾参数后
Fiber 支持在单个路径段末尾加 ? 表示该段可选,但规则很严格:它必须紧贴参数名,且不能出现在通配符或嵌套参数中。
-
app.Get("/posts/:id/:version?", handler)→ 匹配/posts/123和/posts/123/v2 -
app.Get("/posts/:id?/comments", handler)→ 启动报错:invalid pattern,?不能前置 -
app.Get("/files/:user/*path?", handler)→ 错误,通配符*本身已表示“剩余全部”,不能再加? - 需要多层动态路径?拆成明确参数:
/api/:version/users/:id/profile,别试图塞进一个:id/:section?
handler 函数必须返回 error 类型
Go 编译器强制要求 func(c *fiber.Ctx) error 签名,且函数末尾必须有 return 语句——哪怕只是 return nil。
-
return c.SendString("ok")✅ 正确,SendString本身返回error -
c.SendString("ok"); return nil✅ 可行,但冗余 -
c.SendString("ok")❌ 编译失败:missing return at end of function - 复制粘贴 handler 时最容易漏掉
return,编译器报错明确,但新手常卡在这儿半天
最易被忽略的是 StrictRouting 和路径声明的耦合关系:你写了 /user/:id,那 /user/123/ 就是另一个路由,不会自动截断或重定向。别指望框架替你补逻辑,参数、斜杠、问号,每个字符都算数。


















