Fiber性能优势需主动规避fasthttp复用陷阱:ctx.Params()和ctx.Body()返回底层引用,异步使用须显式拷贝;禁用strconv.Atoi,改用c.ParamsInt();c.JSON()需显式调用,否则Content-Type为text/plain;中间件禁用net/http Handler,仅用ctx.Locals存请求数据。

Fiber 的性能优势不是开箱即用的,它依赖你避开 fasthttp 的复用陷阱、禁用默认低效行为,并主动控制内存生命周期。直接照搬 net/http 习惯写法,性能反而可能更差。
ctx.Params() 和 ctx.Body() 返回的是底层缓冲区引用,不是拷贝
fasthttp 复用 RequestCtx,所有 ctx.Params()、ctx.Query()、ctx.Body() 返回的 []byte 或 string 都指向同一块可重用内存。一旦 handler 返回,这块内存可能被下个请求覆盖。
- 错误写法:
idStr := c.Params("id")然后传给 goroutine 异步处理 → 可能读到其他请求的参数值 - 安全做法:必须显式拷贝,比如
idCopy := utils.CopyString(c.Params("id"))或手动copy(buf, c.Params("id")) - 替代方案:启用
Immutable: true配置,让所有返回值自动拷贝,但会带来少量分配开销
别用 strconv.Atoi(ctx.Params("id")) 这类标准库转换函数直读参数
strconv.Atoi 接收 string,而 c.Params("id") 返回的是底层字节切片转的 string —— 表面看没问题,但实际触发了隐式字符串构造,破坏零分配目标;更糟的是,如果参数含非法字符,Atoi 会 panic,且无法在 fasthttp 复用模型下安全 recover。
- 推荐用
c.ParamsInt("id", 0)(v2.50+)或c.QueryInt("page", 1),它们内部跳过字符串转换,直接解析原始字节 - 若需自定义解析逻辑,先用
utils.CopyString拷贝再处理,避免跨 handler 生命周期引用 - 对 JSON body 解析,优先用
c.BodyParser(&v)而非先json.Unmarshal(c.Body(), &v),前者已针对 fasthttp 缓冲区做了适配
ctx.JSON() 不等于自动设 Content-Type,不显式调用就发纯文本
Fiber 默认禁用 MIME 类型自动推导。调用 c.SendString("{'ok':true}") 发出去的响应头是 Content-Type: text/plain; charset=utf-8,前端 fetch().json() 会直接失败。
- 必须显式用
c.JSON(map[string]any{"ok": true})或c.Status(200).JSON(...) - 若需自定义序列化(如使用
easyjson),别绕过c.JSON()直接写c.Send(),否则要手动设c.Set("Content-Type", "application/json") - 注意
c.JSON()内部仍调用json.Marshal,高并发下反射开销明显;结构体字段多时,考虑预生成 bytes 并缓存,或改用ffjson替代
中间件里别混用 net/http Handler,ctx.Locals 是唯一安全的请求级存储
fasthttp 的生命周期和接口签名与 net/http 完全不兼容。把 http.HandlerFunc 塞进 app.Use() 会编译失败;强行包装会导致 ctx.Context() 失效、超时丢失、甚至 panic。
- 存用户 ID、trace ID 等请求数据,只用
c.Locals["user_id"] = 123,读取时用c.Locals.Get("user_id")+ 类型断言 - 不要碰
c.Context().WithValue()—— fasthttp 的 context 不支持 cancel/timeout,且WithValue在复用模型下极易污染后续请求 - 需要超时控制?用
time.AfterFunc或外部定时器监听c.Context().Done(),而非依赖context.WithTimeout
最易被忽略的一点:Fiber 的“高性能”只在你全程配合 fasthttp 内存模型时成立。一旦开始频繁触发 GC(比如大量 fmt.Sprintf、随意 string() 转换、或在 handler 外保留 ctx 字段引用),你就已经退回 net/http 水平——而且还没获得它的兼容性和生态便利性。











