上线必须用fiber.New()而非fiber.Default(),因后者默认启用Logger等中间件导致敏感日志泄露、TTFB增加0.3–0.8ms;StrictRouting保持true,/users与/users/视为不同路径,应通过重定向中间件或显式注册处理尾斜杠;c.Params、c.QueryParam、c.BodyParser来源隔离不可混用。

直接用 fiber.New() 初始化,别碰 fiber.Default();StrictRouting 保持默认 true,路径尾斜杠必须显式处理;app.Use()、app.Group()、app.Get() 职责不能混,否则不是 404 就是参数取不到。
StrictRouting=true 下怎么避免 /users 和 /users/ 都 404
Fiber 默认把 /users 和 /users/ 当作两条完全独立的路由。你只注册了 app.Get("/users", h),那访问 /users/ 必然 404——这不是 bug,是匹配逻辑本身如此。
- 别全局关 StrictRouting:
fiber.New(&fiber.Config{StrictRouting: false})会让/users/123被/users错误捕获,c.Params("id")拿不到值 - 推荐统一重定向:加一个前置中间件,对非根路径且以
/结尾的请求做 301 跳转:c.Redirect(strings.TrimSuffix(c.Path(), "/"), 301) - 或显式注册两条:
app.Get("/users", h)和app.Get("/users/", redirectHandler) - 前端、OpenAPI、Postman 全部约定用无尾斜杠路径,后端只注册一种形式,最省心
app.Use() 和 app.Group() 到底该用哪个
app.Use() 是前缀级拦截器,app.Group() 是路由组织单元,两者语义完全不同,混用会路由错乱。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
-
app.Use("/api", m):所有以/api开头的请求(无论 GET/POST/PUT),都先过中间件m;它不注册 handler,只拦截 -
api := app.Group("/api"):返回一个新*fiber.Router,后续api.Get("/users", h)实际注册的是GET /api/users - 常见错误:
api.Get("/api/users", h)→ 最终变成/api/api/users(多了一层前缀) -
app.Use()对所有 HTTP 方法生效;app.Group().Use()注册的中间件只对该分组内显式定义的路由生效
c.Params()、c.QueryParam()、c.BodyParser() 为什么总读不到数据
三者来源完全隔离,名字一样也不互通。混用必空,不是框架问题,是读错了地方。
-
c.Params("id")只从路径占位符提取,比如app.Get("/user/:id", h)匹配/user/123后才可取到"123";对/user?id=123或 JSON body 完全无效 -
c.QueryParam("q")只解析 URL query string,如/search?q=go→"go";不碰路径、header、body -
c.BodyParser(&v)是专为 JSON 设计的,要求Content-Type: application/json;传参必须是结构体地址,写成c.BodyParser(v)(没取地址)会导致v始终为零值 - 表单数据用
c.FormValue("name"),别拿c.BodyParser硬套application/x-www-form-urlencoded
上线前必须检查的三个硬性配置点
这些不是“建议”,是上线即崩的临界点,容易被忽略但影响直接。
- 初始化必须用
fiber.New(),禁用fiber.Default():后者自带Logger中间件,每秒打几百条含Authorization头的日志,I/O 直接拖垮 QPS,TTFB 增加 0.3–0.8ms -
app.Group()的路径前缀不能带尾斜杠:app.Group("/api/")和app.Group("/api")是两个不同分组,子路由互不重叠,别写成后者再补前者 - 中间件里拒绝请求必须
return,不能跟c.Next():比如鉴权失败调了c.Status(401).SendString("unauthorized")后还调c.Next(),响应已发出,Fiber 会终止链路,后续 handler 全部跳过
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










