gpt4 book ai didi

go - 如何在 Gin 中对路线进行分组?

转载 作者:行者123 更新时间:2023-12-01 22:12:12 24 4
gpt4 key购买 nike

我想将路线分为不同的文件,因此主文件不会太困惑。
我想要这样的东西在自己的文件中:

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": "...",
})
}

关于go - 如何在 Gin 中对路线进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62906766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com