Fiber v3设计强调开箱即用与性能安全:需显式导入/v3、正确处理ctx复用、严格检查Listen错误、按序注册中间件。

直接上手就能跑通,不需要额外抽象层或模板工程 —— Fiber 的设计就是让你写完 app.Get 就能 go run main.go 启动服务。
初始化项目并引入 fiber/v3
Fiber 当前稳定主版本是 v3(2026 年已全面切换),别再用 v2 或无版本号的导入路径,否则会遇到中间件签名不兼容、Ctx 方法缺失等问题。
- 运行
go mod init myapp初始化模块 - 执行
go get github.com/gofiber/fiber/v3(注意末尾/v3) - 导入时必须写全
"github.com/gofiber/fiber/v3",少一个v3就会报错undefined: fiber.New
定义路由和处理函数时注意 ctx 生命周期
fiber.Ctx 是复用对象,不是每次请求都新建 —— 这是性能关键,也是最常踩坑的地方。
- 禁止把
c或其返回值(如c.Query(...)、c.Body())保存到全局变量、goroutine 或结构体字段里 - 所有解析操作(
c.BodyParser、c.Params、c.FormValue)必须在当前 handler 函数内完成 - 如果要异步处理,必须先拷贝需要的数据:比如
id := c.Params("id"),再传给 goroutine,而不是传c
启动服务前务必检查端口和错误处理
app.Listen 是阻塞调用,且返回 error;不处理它会导致服务静默失败。
- 不要写
app.Listen(":3000")然后不管返回值 - 必须用
log.Fatal(app.Listen(":3000"))或显式判断:if err := app.Listen(":3000"); err != nil { log.Fatalln(err) } - 端口被占用时错误是
listen tcp :3000: bind: address already in use,不是 panic,得靠日志才能发现 - 想支持 HTTPS?直接换用
app.ListenTLS(":443", "cert.pem", "key.pem"),别自己套 net/http
中间件注册顺序直接影响行为逻辑
Fiber 中间件是链式执行的,顺序错了,日志打不出来、token 校验就失效、甚至 CORS 都不生效。
- 日志中间件建议放在最外层(
app.Use(LoggerPrint())),否则出错时没记录 - 鉴权中间件(如 JWT 校验)必须在业务路由之前,但要在日志之后,方便记录拒绝原因
- 静态文件中间件(
app.Static)应放在路由注册前,否则会被后续app.Get覆盖匹配 - 自定义中间件返回
c.Next()前若没调用c.SendXXX或c.Status,请求才会继续向下走;一旦写了响应,后续中间件和路由 handler 就不会执行
真正容易被忽略的不是语法,而是 fiber.Ctx 的复用本质 —— 它让 Fiber 快,也让你一不留神就把请求上下文污染到别的请求里。


















