生产环境必须用 fiber.New() 初始化,Go 版本需与 Fiber 版本对齐(v2 要求 Go 1.21+,v3 要求 Go 1.24+),StrictRouting 应保持 true 并显式处理尾斜杠路由,禁用 fiber.Default() 避免 I/O 瓶颈。

生产环境必须用 fiber.New() 初始化,且 Go 版本、模块路径、StrictRouting 配置三者不匹配,服务启动后立刻掉进 404 或 I/O 瓶颈坑里。
Go 版本和 Fiber 版本必须对齐
Fiber v2 支持 Go 1.21+(官方最低要求是 1.19,但 1.21 是当前稳定基线),v3 要求 Go 1.24+。你运行 go version 得到的是 go1.23.5?那 go get github.com/gofiber/fiber/v3 会静默拉取旧版或失败——不是报错,而是依赖解析绕过版本约束,最终跑起来的可能是不兼容的 v2.48 混合体。
- 检查命令:
go version,低于 1.21 就别碰 v2;低于 1.24 就别试 v3 - 升级 Go(如需):
go install golang.org/dl/go1.24@latest && go1.24 download - 生产项目无条件选 v2:
go get github.com/gofiber/fiber/v2,别加-u,避免次版本漂移 - v3 仍是测试阶段(截至 2026 年 10 月),文档、中间件生态、CI/CD 工具链都没完全对齐
初始化必须用 fiber.New(),不是 fiber.Default()
fiber.Default() 是开发快照工具,不是生产入口。它默认加载 logger、recover、requestid 三个中间件,上线后每秒几百请求就会把磁盘 I/O 打满——尤其是 logger 会完整记录 Authorization 头,TTFB 实测增加 0.3–0.8ms。
- 正确写法:
app := fiber.New(),空实例起步 - 日志只在 debug 环境启用:
if os.Getenv("ENV") == "dev" { app.Use(logger.New()) } - 错误恢复关堆栈:
app.Use(recover.New(recover.Config{EnableStackTrace: false})) - 千万别在上线前还留着
fiber.Default(),哪怕只是“先跑通”
StrictRouting 导致 /users 和 /users/ 都 404?别关它
Fiber 默认 StrictRouting: true,意味着 /users 和 /users/ 是两条独立路由。你只注册了前者,后者访问必 404——这不是 bug,是设计。
- 错误解法:
fiber.New(&fiber.Config{StrictRouting: false}),这会让/users/123被/users匹配,c.Params("id")拿不到值 - 推荐方案一:显式注册两个路径:
app.Get("/users", handler)和app.Get("/users/", handler) - 推荐方案二:加重定向中间件,统一 301 跳转到无尾斜杠版本(RESTful 接口应有明确约定)
- API 文档里必须写死是否带尾斜杠,前端调用不能靠猜
最容易被忽略的点是:Fiber 的 ctx.Next() 不是“继续执行下一个中间件”,而是交还控制权——一旦响应已写出(比如 c.Status(401).Send()),后续所有 handler 都不会触发。权限校验失败后写 ctx.Next(),等于多写了一行无效代码。


















