app.Get()是定义GET路由的唯一入口,需传入带前导斜杠的路径(如"/users")和func(c *fiber.Ctx) error类型处理器,严格区分/users与/users/,参数用c.Params()提取,返回error不可省略。

app.Get() 是定义基础 GET 路由的唯一入口
Fiber 不提供装饰器、结构体标签或配置文件式路由注册,app.Get() 就是定义 GET 路由最直接、最不可绕过的方式。它接受两个参数:路径字符串和处理函数,二者缺一不可。
常见错误是漏掉路径前导斜杠或返回值类型不对:
-
app.Get("users", h)→ 永远匹配不到,必须写成app.Get("/users", h) - handler 函数签名必须是
func(c *fiber.Ctx) error,且末尾必须有return;只写c.SendString("ok")不加return会编译失败 - 路径中不能混用通配符和参数节点,比如
/files/:user/*path启动时报invalid pattern
路径参数怎么提取?用 c.Params() 不要用 c.Query()
动态段(如 /posts/:id)里的值,不是 query 参数,而是路由参数,必须通过 c.Params("id") 获取。误用 c.Query("id") 会始终返回空字符串。
使用场景举例:访问 GET /posts/123 时:
-
c.Params("id")→ 返回"123"(字符串) -
c.Query("id")→ 返回""(除非 URL 是/posts/123?id=123) - 如果需要强转为整数,得自己调用
strconv.Atoi(c.Params("id")),Fiber 不自动做类型转换
StrictRouting 开启时,/users 和 /users/ 是两个不同路由
默认 StrictRouting: true,这意味着 app.Get("/users", h) 只响应 GET /users,而 GET /users/ 会直接 404。
这不是 bug,是设计选择。强行关闭 StrictRouting 容易引发歧义,比如:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
app.Get("/users", h1)app.Get("/users/:id", h2)- 若关闭 StrictRouting,
/users/123可能被错判为/users+ 剩余路径,导致 h1 执行而非 h2
正确做法是:明确区分意图——需要结尾斜杠就显式注册 app.Get("/users/", h),否则保持无斜杠写法。
为什么 handler 必须返回 error?
Fiber 的中间件链和错误传播机制依赖 handler 的返回值。返回 error 是框架判断是否中断后续中间件、是否触发全局错误处理器的唯一信号。
几个典型场景:
- 正常响应:
return c.JSON(200, data)或return nil(等价于return c.SendStatus(200)) - 主动报错:
return c.Status(404).SendString("not found"),此时返回非 nil error,但响应已写出,不会重复渲染 - 中间件中断:
return fiber.ErrNotFound会跳过后续中间件,走错误处理流程
最容易被忽略的是:哪怕你只调用 c.SendString(),也得显式 return nil 或直接 return c.SendString() —— 因为该方法本身返回 error 类型,Go 编译器强制要求函数末尾有 return 语句。










