fiber中通过app.group()创建路由组实现路径前缀自动叠加和中间件统一挂载,支持嵌套分组构建多级路径,且分组中间件仅作用于自身及子路由,执行顺序优先于全局中间件。

在Fiber中为API接口按业务模块划分路由前缀(如/v1/users、/v1/posts),避免每个路由手动拼接重复路径,同时统一挂载中间件控制访问权限或日志采集。
基础分组创建与路由注册
调用app.Group("/v1")创建一个以/v1为前缀的路由组,返回的group对象支持链式调用Get、Post等方法,所有注册的子路由自动继承该前缀。
直接使用group.Get("/users", handler)注册的路由,实际匹配路径是/v1/users,而非/users——【前缀不会被覆盖,而是叠加】。
同一个Group实例可连续注册多个HTTP方法:group.Post("/posts", postHandler) → group.Delete("/posts/:id", delHandler)。
嵌套分组实现多级路径结构
方法一:复用group变量进行二级分组
usersGroup := app.Group("/v1").Group("/users") → usersGroup.Get("/", listHandler) → usersGroup.Get("/:id", getHandler) → usersGroup.Post("/", createHandler)。
方法二:一行链式嵌套(更紧凑)
app.Group("/v1").Group("/users").Get("/:id", getHandler)会注册/v1/users/:id,括号层级不影响最终路径拼接逻辑。
注意:嵌套时每层Group的path参数不能以/开头,否则会触发panic;例如app.Group("/v1").Group("//users")非法。
分组内统一挂载中间件
第一步:定义权限中间件
func authMiddleware(c *fiber.Ctx) error { if c.Get("Authorization") == "" { return c.Status(401).SendString("Unauthorized") } return c.Next() }
第二步:将中间件传入Group构造函数
adminGroup := app.Group("/admin", authMiddleware) → adminGroup.Get("/dashboard", dashboardHandler) → adminGroup.Post("/logs", logHandler)。
第三步:验证效果
访问/admin/dashboard时,authMiddleware会先执行;若未携带Authorization头,直接返回401且后续handler不执行——【中间件仅作用于该Group及其子路由,不影响其他Group】。
分组与全局中间件的执行顺序
全局中间件(通过app.Use()注册)总是在Group内中间件之前运行。
例如:app.Use(loggerMiddleware) → app.Group("/api", authMiddleware).Get("/data", handler),请求/api/data的执行流为:loggerMiddleware → authMiddleware → handler。
若需调整顺序,必须把loggerMiddleware也显式传入Group构造函数,放弃全局注册方式。











