app.group() 是创建路由分组的唯一标准方式,返回实现 router 接口的 *fiber.group 对象,支持嵌套、自动路径拼接、严格斜杠匹配及分组级中间件绑定。

app.Group() 是创建路由分组的唯一标准方式
Fiber 不提供 app.Route() 或类似 Express 的 Router 实例导出机制,所有分组必须通过 app.Group() 构建。它返回一个 *fiber.Group 类型对象,该对象实现了 Router 接口,因此可直接调用 Get、Post 等方法注册子路由。
常见错误是试图手动拼接路径字符串(如 "/api/users")来模拟分组——这会导致中间件无法批量绑定、前缀逻辑散落各处、后续维护困难。
-
app.Group()内部会自动将传入的prefix与子路由路径拼接,且保证斜杠边界正确(如app.Group("/api")+.Get("users")→ 实际注册为/api/users) - 分组本身不响应请求,只作为容器;若需根路径行为(如
/api/),必须显式注册,例如api.Get("/", handler) - 分组支持嵌套:可对
app.Group("/v1").Group("/admin")连续调用,最终前缀为/v1/admin
分组中间件必须在 Group() 调用时传入,不能事后追加
想让 /admin/* 下所有路由都走鉴权,必须把中间件函数作为第二个参数传给 app.Group(),而不是在 group 对象上再调 Use() —— 后者注册的是“挂载在该分组路径下的中间件”,但执行时机和作用域与分组级中间件不同,容易错乱。
例如:admin := app.Group("/admin", authMiddleware) 是正确的;而 admin.Use(authMiddleware) 会注册一个匹配 /admin/* 的 USE 路由,但它对 /admin 根路径无效,且可能与已注册的 GET /admin 冲突。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 分组中间件仅作用于该分组下显式定义的子路由(即调用了
.Get、.Post等的方法),不影响其他路径 - 多个中间件可按顺序传入:
app.Group("/api", logger, jwtAuth),执行顺序严格按参数位置 - 若分组内某条路由需要额外中间件(如某接口还要加 IP 白名单),可在其 handler 前单独插入:
api.Get("/delete", ipWhitelist, handler)
分组路径末尾斜杠影响匹配,StrictRouting 默认开启
Fiber 默认启用 StrictRouting: true,这意味着 app.Group("/api") 和 app.Group("/api/") 是两个完全不同的分组前缀,各自注册的子路由互不重叠。
比如你写 api := app.Group("/api"),然后 api.Get("/users", h),那请求 GET /api/users/ 会 404;反之若分组是 "/api/",则 GET /api/users 会 404。
- 生产环境不要关闭
StrictRouting来“兼容”,它会影响参数节点行为(如/users/:id和/users/:id/会被视为不同路由) - 统一风格:推荐所有分组使用无尾部斜杠形式(
"/api"、"/admin"),并在必要时显式注册带斜杠的子路由(group.Get("/health/", h)) - 若需自动跳转,加一层中间件处理结尾斜杠重定向,而非依赖框架配置
分组不能替代通配或参数路由,路径段必须明确
app.Group() 只做静态前缀拼接,不解析路径参数或通配符。你不能写 app.Group("/users/:id") 期望它自动提取 ID —— 这样注册的是字面量路径前缀 /users/:id,不是参数化路由。
参数和通配必须写在子路由中:正确写法是 users := app.Group("/users"); users.Get("/:id", handler),这样 /:id 才会被基数树识别为参数节点。
- 通配符
*filepath同样只能出现在子路由路径末尾,如static.Get("/*filepath", handler),不能放在分组 prefix 里 - 分组 prefix 中出现
:或*会被当作普通字符处理,不会触发参数/通配逻辑 - 如果需要动态前缀(如按租户分组
/t/{tenant}/...),应改用中间件提前解析并存入上下文,而非依赖分组机制
/api/users/123)完成,分组只是组织手段。










