mirror of
https://github.com/gofiber/fiber.git
synced 2025-05-05 15:20:52 +00:00
76 lines
1.7 KiB
Markdown
76 lines
1.7 KiB
Markdown
---
|
|
id: grouping
|
|
title: 🎭 Grouping
|
|
sidebar_position: 2
|
|
---
|
|
|
|
## Paths
|
|
|
|
Like **Routing**, groups can also have paths that belong to a cluster.
|
|
|
|
```go
|
|
func main() {
|
|
app := fiber.New()
|
|
|
|
api := app.Group("/api", middleware) // /api
|
|
|
|
v1 := api.Group("/v1", middleware) // /api/v1
|
|
v1.Get("/list", handler) // /api/v1/list
|
|
v1.Get("/user", handler) // /api/v1/user
|
|
|
|
v2 := api.Group("/v2", middleware) // /api/v2
|
|
v2.Get("/list", handler) // /api/v2/list
|
|
v2.Get("/user", handler) // /api/v2/user
|
|
|
|
log.Fatal(app.Listen(":3000"))
|
|
}
|
|
```
|
|
|
|
A **Group** of paths can have an optional handler.
|
|
|
|
```go
|
|
func main() {
|
|
app := fiber.New()
|
|
|
|
api := app.Group("/api") // /api
|
|
|
|
v1 := api.Group("/v1") // /api/v1
|
|
v1.Get("/list", handler) // /api/v1/list
|
|
v1.Get("/user", handler) // /api/v1/user
|
|
|
|
v2 := api.Group("/v2") // /api/v2
|
|
v2.Get("/list", handler) // /api/v2/list
|
|
v2.Get("/user", handler) // /api/v2/user
|
|
|
|
log.Fatal(app.Listen(":3000"))
|
|
}
|
|
```
|
|
|
|
:::caution
|
|
Running **/api**, **/v1** or **/v2** will result in **404** error, make sure you have the errors set.
|
|
:::
|
|
|
|
## Group Handlers
|
|
|
|
Group handlers can also be used as a routing path but they must have **Next** added to them so that the flow can continue.
|
|
|
|
```go
|
|
func main() {
|
|
app := fiber.New()
|
|
|
|
handler := func(c *fiber.Ctx) error {
|
|
return c.SendStatus(fiber.StatusOK)
|
|
}
|
|
api := app.Group("/api") // /api
|
|
|
|
v1 := api.Group("/v1", func(c *fiber.Ctx) error { // middleware for /api/v1
|
|
c.Set("Version", "v1")
|
|
return c.Next()
|
|
})
|
|
v1.Get("/list", handler) // /api/v1/list
|
|
v1.Get("/user", handler) // /api/v1/user
|
|
|
|
log.Fatal(app.Listen(":3000"))
|
|
}
|
|
```
|