如何在杜松子酒中对路线进行分组?

How to group routes in gin?

我想把我的路线分组在不同的文件中,这样主文件就不会很乱了。

我想在他们自己的文件中加入这样的内容:

v1 := router.Group("/v1")
{
  v1.Group("users", usersRoutes)
  v1.Group("pictures", picturesRoutes)
  v1.Group("friends", friendsRoutes)
}

所以 *Routes 中的每一个看起来像这样:

users := v1.Group("/users")
{
  users.GET("/", getUsers)
  users.POST("/", createUser)
}

这可能吗?现在我的代码如下所示:

package app

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func getUrls() {
    v1 := router.Group("/v1")
    {
        ping := v1.Group("/ping")
        {
            ping.GET("/", pongFunction)
        }
        users := v1.Group("/users")
        {
            users.GET("/", getUsersFunction)
        }
    }
}

但这会大大增加它的大小。

您需要将路由器变量存储在您的结构或全局变量中。然后各个 go 文件将处理程序添加到该变量。这是一个例子:

routes.go

package app

import (
    "github.com/gin-gonic/gin"
)

type routes struct {
    router *gin.Engine
}

func NewRoutes() routes {
    r := routes{
        router: gin.Default(),
    }

    v1 := r.router.Group("/v1")

    r.addPing(v1)
    r.addUsers(v1)

    return r
}

func (r routes) Run(addr ...string) error {
    return r.router.Run()
}

ping.go

package app

import "github.com/gin-gonic/gin"

func (r routes) addPing(rg *gin.RouterGroup) {
    ping := rg.Group("/ping")

    ping.GET("/", pongFunction)
}

func pongFunction(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "pong",
    })
}

users.go

package app

import "github.com/gin-gonic/gin"

func (r routes) addUsers(rg *gin.RouterGroup) {
    users := rg.Group("/users")

    users.GET("/", getUsersFunction)
}

func getUsersFunction(c *gin.Context) {
    c.JSON(200, gin.H{
        "users": "...",
    })
}