Fiber中GET路由必须返回error类型,如app.Get("/hello", func(c fiber.Ctx) error { return c.SendString("ok") });路径参数用c.Params()、查询参数用c.Query();响应需匹配方法(如c.JSON()设application/json);v3版本Ctx为值类型,签名勿加。

直接用 app.Get() 注册处理函数即可,但要注意参数提取方式、返回值约定和错误传播机制。
GET路由定义必须返回error类型
Fiber的路由处理函数签名强制要求返回 error,哪怕你不做任何错误处理也得写 return nil。这是框架统一错误中间件(如 Recover)能生效的前提。
- 正确写法:
app.Get("/hello", func(c *fiber.Ctx) error { return c.SendString("ok") }) - 错误写法:
app.Get("/hello", func(c *fiber.Ctx) { c.SendString("ok") })—— 编译失败 - 空响应也要显式返回:
return c.Status(204).Send(nil)
URL路径参数要用c.Params()取,不是c.Query()
区分清楚:路径参数(如 /user/:id 中的 id)和查询参数(如 ?page=2)获取方式完全不同。
- 路径参数:
app.Get("/user/:id", func(c *fiber.Ctx) error { id := c.Params("id"); ... }) - 查询参数:
page := c.Query("page", "1")—— 第二个参数是默认值 - 混合使用常见:
/posts?limit=10&offset=0+/posts/:category
响应方法选错会导致Content-Type异常
c.SendString() 默认设 text/plain;c.JSON() 自动设 application/json;但 c.Send() 不设任何 header,容易被浏览器当成下载或乱码。
- 返回纯文本:
c.SendString("hello") - 返回 JSON:
c.JSON(fiber.Map{"data": "ok"}) - 返回自定义字节:
c.Status(200).Send([]byte("raw"))—— 必须手动设 status 和 type - 漏掉
Status()时,默认是 200,但某些代理或客户端可能误判
开发时别忽略c.Next()在中间件链里的作用
如果你加了全局中间件(比如日志或 CORS),而某个 GET 路由提前 return 了,后续中间件不会执行 —— 这本身没问题,但调试时容易误以为中间件没生效。
- 想让中间件始终运行完,就不要在 handler 里提前
return,而是用c.Set("key", val)传值,最后统一响应 - 需要短路(如鉴权失败立即返回 401),就
return c.Status(401).SendString("unauthorized") -
c.Next()只在中间件中有效,路由 handler 里调它没意义
最常被忽略的是:Fiber v3 的 fiber.Ctx 是值类型而非指针,但在 handler 签名里仍写作 *fiber.Ctx 吗?不,v3 已改为 fiber.Ctx(无星号),升级时若沿用旧写法会编译报错 —— 这个细节在迁移时几乎没人注意,却直接卡住启动。


















