fiber路由需显式声明、路径必须以/开头、handler必须返回error、strictrouting默认开启且不可混用:id与*path、参数获取严格区分来源。

直接用 app.Get()、app.Post() 等方法注册路由是最安全、最可控的方式,别被“高级路由”“动态匹配”带偏——Fiber 的设计哲学就是显式优于隐式,路径写错一个斜杠、少个冒号,就 404,没有魔法。
路径必须带前导斜杠,且不能漏掉 return error
Fiber 要求所有路由路径以 / 开头,比如 app.Get("/users", h) 合法,而 app.Get("users", h) 永远不匹配。同时 handler 必须返回 error 类型,哪怕只是 nil:
-
c.SendString("ok")❌ 编译失败:missing return -
return c.SendString("ok")✅ 正确,SendString 本身返回error -
c.JSON(200, v); return nil✅ 可行,但多写一行,易漏
新手常复制示例时删掉 return,Go 编译器会直接报错,但卡在这一行的人不少。
StrictRouting 开启时,/users 和 /users/ 是两条不同路由
默认 StrictRouting: true,所以只注册 app.Get("/users", h),访问 /users/ 就是 404。这不是 bug,是契约——它避免了 /users/:id 和 /users/123 被错误匹配为 /users/ 后再进参数提取。
- 别关
StrictRouting: false:关掉后,/users/123可能被/users匹配,c.Params("id")拿不到值 - 显式补一条重定向:
app.Get("/users/", func(c *fiber.Ctx) error { return c.Redirect("/users", 301) }) - 或加统一中间件:
if strings.HasSuffix(c.Path(), "/") && c.Path() != "/" { c.Redirect(strings.TrimSuffix(c.Path(), "/"), 301) }
上线前务必检查前端 SDK、OpenAPI spec、Postman 集合是否全用无尾斜杠路径,否则联调阶段就崩。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
:id 和 *path 不能混用,末尾通配符才是唯一合法位置
Fiber 路由解析是单次线性匹配,不是正则回溯,所以:
-
/users/:id/posts✅ 合法,:id捕获单一段 -
/files/:user/*path❌ 启动报错:invalid pattern——*path只能在路径末尾 -
/v1//:id❌ 不支持,双斜杠与:id冲突,引擎无法确定优先级
要支持 /api/v2/users/123/profile 这类多层动态路径,应拆成 /api/:version/users/:id/:section,而不是硬塞通配符。
别把 c.Params、c.QueryParam、c.BodyParser 当成同一来源
三者完全隔离,读错地方就空值:
-
c.Params("id")只读路径占位符,如/user/123中的"123";对?id=123或 JSON body 无效 -
c.QueryParam("q")只读 query string,如/search?q=go中的"go";不解析路径、body、header -
c.BodyParser(&v)是给 JSON 准备的;c.FormValue("name")才是application/x-www-form-urlencoded的正确读法
最容易忽略的是:Fiber 默认不自动解析 multipart/form-data,上传文件必须显式加 formfile 中间件,否则 c.FormFile() 返回 nil。










