为了账号安全,请及时绑定邮箱和手机立即绑定

如何在杜松子酒中组合一组路线?

如何在杜松子酒中组合一组路线?

Go
BIG阳 2022-06-13 15:47:26
我在两个不同的包中创建了两个不同的组用于gin专门路由/user,/todo我想将它们合并到一个文件中。这是我的userroutes.go文件。package userrouterimport (    "github.com/gin-gonic/gin")//UserRoutes for userfunc UserRoutes() *gin.RouterGroup {    r := gin.Default()    v1 := r.Group("/user")    {        v1.GET("/hello", func(c *gin.Context) {            c.JSON(200, gin.H{                "message": "pong",            })        })    }    return v1}并且todoroutes.go作为package todorouterimport (    "github.com/gin-gonic/gin")//TodoRoutes for creating Todofunc TodoRoutes() *gin.RouterGroup {    r := gin.Default()    v2 := r.Group("/todo")    {        v2.GET("/hello", func(c *gin.Context) {            c.JSON(200, gin.H{                "message": "pong",            })        })    }    return v2}然后想将它们合并到routes.go.package routerimport (    todo "TODO/api/Routes/Todo/TodoRoutes"    user "TODO/api/Routes/User/UserRoutes"    "fmt"    "github.com/gin-gonic/gin")//Router for all routesfunc Router() {    // r := gin.Default()    userRoutes := user.UserRoutes()    todoRoutes := todo.TodoRoutes()}如何将它们合并到一个文件中,以便可以使用/api诸如localhost:8081/api/user/createor之类的前缀来获取它们localhost:8081/api/todo/create。另外,我是否需要在我创建r := gin.Default()的每条路线中创建,或者可以使用一次来完成?谢谢。
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

只需创建一个超级组,然后在其下创建您的组。代码示例来说明我的意思:


    router := gin.New()

    

    superGroup := router.Group("/api")

    {

        userGroup := superGroup.Group("/user")

        {

            // user group handlers

        }

    

        todoGroup := superGroup.Group("/todo")

        {

            // todo group handlers

        }

    }


使用此代码,您无法像现在那样创建组,因为您的函数todorouter.TodoRoutes和userrouter.UserRoutes实例化它们自己的gin.Engine. 因此,您必须将顶级引擎和/api组移动到一个共同的地方。


如果需要,您可以将 api 组对象作为函数参数传递。例子:


//TodoRoutes for creating Todo

func TodoRoutes(apiGroup *gin.RouterGroup) {


    v2 := apiGroup.Group("/todo")

    {


        v2.GET("/hello", func(c *gin.Context) {

            c.JSON(200, gin.H{

                "message": "pong",

            })

        })


    }

}

然而,我的建议是让您的代码井井有条,将所有路由器实例化在同一个地方,然后将处理程序放在单独的包中。


// package todoroutes

func HandleHello(c *gin.Context) {

            c.JSON(200, gin.H{

                "message": "pong",

            })

}


// package router

    router := gin.New()

    

    superGroup := router.Group("/api")

    {

        userGroup := superGroup.Group("/user")

        {

             userGroup.GET("/hello", todoroutes.HandleHello)

        }

    }


查看完整回答
反对 回复 2022-06-13
?
隔江千里

TA贡献1906条经验 获得超10个赞

这个答案基于blackgreen 的 answer。这是我对类似问题的解决方案。我创建了一个超级组(“/api/v1”),然后在它下面添加子组(“users”、“books”)。我能够将子组放入不同的文件中,并向它们发送一个gin.RouterGroup(). 结果,我有了这个漂亮而干净的文件夹结构:


controllers/

  user_controllers

  book_controllers

routes/

  user_routes

  book_rontrollers

  index

middlewares/

  all

main.go

main.go


func startServer() {

    app := gin.New()


    router := app.Group("/api/v1")

    routes.AddRoutes(router)


    utils.ConnectDatabase()


    app.Run(":5500")

}

路线/book_routes.go


package routes


func bookRoutes(superRoute *gin.RouterGroup) {

    booksRouter := superRoute.Group("/books")

    {

        booksRouter.GET("/", controllers.BookControllers.GetBooks)


        booksRouter.POST("/", controllers.BookControllers.CreateBook)

    }

}

路线/user_routes.go


package routes


func userRoutes(superRoute *gin.RouterGroup) {

    booksRouter := superRoute.Group("/users")

    {

        booksRouter.GET("/", controllers.UserControllers.GetUsers)


        booksRouter.POST("/", controllers.UserControllers.CreateUser)

    }

}

路线/index.go


func AddRoutes(superRoute *gin.RouterGroup) {

    bookRoutes(superRoute)

    userRoutes(superRoute)

}


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信