必须用 fiber.New() 初始化应用,fiber.Default() 会因默认中间件导致 I/O 瓶颈和敏感头泄露;Go 版本需 ≥1.19,禁用 go get -u,StrictRouting 需配合重定向或显式注册路由,中间件中响应后须 return 避免链路中断。

直接用 go mod init + go get github.com/gofiber/fiber/v2 就能跑起来,别碰 fiber.Default() ——它上线即拖垮性能、泄露敏感头。
安装依赖前先确认 Go 版本和模块路径
Fiber v2 要求 Go ≥ 1.19(当前稳定生产推荐版本),v3 虽已发布但仍在测试阶段,不建议新项目使用。执行前检查:
-
go version确保输出类似go version go1.24.3 darwin/arm64 -
go env GOPROXY建议设为https://proxy.golang.org,direct避免拉包失败 - 不要用
go get -u——它可能意外升级到不兼容的次版本
初始化项目必须用 fiber.New(),不是 fiber.Default()
fiber.Default() 是开发快捷方式,但默认加载 Logger、Recover、RequestID 三个中间件。上线后每秒几百请求会把 Authorization 头全打到磁盘,I/O 成瓶颈,TTFB 实测增加 0.3–0.8ms。
- 正确写法:
app := fiber.New()创建空实例 - 开发验证逻辑时可临时用
fiber.Default(),但上线前必须替换 - 如需日志,改用采样式中间件(比如只记录 4xx/5xx)或接入
zerolog - 错误恢复建议:
recover.New(recover.Config{EnableStackTrace: false}),关掉堆栈避免信息泄露
StrictRouting 导致 /users 和 /users/ 都 404?这是配置没对齐,不是 bug
Fiber 默认 StrictRouting: true,意味着 /users 和 /users/ 是两条独立路由。你只注册了前者,后者访问必然 404。
- 别全局关 StrictRouting:
fiber.New(&fiber.Config{StrictRouting: false})—— 这会导致路径歧义,比如同时有/users和/users/:id时,/users/123可能被前者匹配,c.Params("id")拿不到值 - 推荐做法:加一层重定向中间件,统一处理尾部斜杠
app.Use(func(c *fiber.Ctx) error { if strings.HasSuffix(c.Path(), "/") && c.Path() != "/" { return c.Redirect(strings.TrimSuffix(c.Path(), "/"), 301) } return c.Next() }) - 或者显式注册两条:
app.Get("/users", handler)和app.Get("/users/", handler)
第一个路由跑不起来?检查三件事:端口、路径结尾、响应是否已写出
常见现象是 app.Listen(":3000") 启动成功,但访问 localhost:3000 无响应或超时。
- 确认没被防火墙或 Docker 网络拦截 —— 直接
curl -v http://localhost:3000看原始响应 - 路径结尾斜杠问题同上,别假设框架会自动归一化
- 权限中间件里写了
c.Status(401).Send("unauthorized")后又调c.Next()?此时响应已发出,Fiber 会终止链路,后续 handler 不再执行 - 确保
main()最后是log.Fatal(app.Listen(":3000")),不是app.Listen()后就退出
真正容易被忽略的是:Fiber 的中间件执行顺序和响应状态强耦合,c.Next() 不是“继续”,而是“交还控制权”——一旦响应头发出,链路就断了。很多 404 或空白响应,其实卡在中间件提前写了响应却没 return。


















