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

我在两个不同的包中创建了两个不同的组用于gin专门路由/user,/todo我想将它们合并到一个文件中。这是我的userroutes.go文件。


package userrouter


import (

    "github.com/gin-gonic/gin"

)


//UserRoutes for user

func 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 todorouter


import (

    "github.com/gin-gonic/gin"

)


//TodoRoutes for creating Todo

func 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 router


import (

    todo "TODO/api/Routes/Todo/TodoRoutes"

    user "TODO/api/Routes/User/UserRoutes"

    "fmt"


    "github.com/gin-gonic/gin"

)



//Router for all routes

func Router() {

    // r := gin.Default()

    userRoutes := user.UserRoutes()

    todoRoutes := todo.TodoRoutes()


}

如何将它们合并到一个文件中,以便可以使用/api诸如localhost:8081/api/user/createor之类的前缀来获取它们localhost:8081/api/todo/create。另外,我是否需要在我创建r := gin.Default()的每条路线中创建,或者可以使用一次来完成?谢谢。


BIG阳
浏览 135回答 2
2回答

温温酱

只需创建一个超级组,然后在其下创建您的组。代码示例来说明我的意思:    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 Todofunc TodoRoutes(apiGroup *gin.RouterGroup) {    v2 := apiGroup.Group("/todo")    {        v2.GET("/hello", func(c *gin.Context) {            c.JSON(200, gin.H{                "message": "pong",            })        })    }}然而,我的建议是让您的代码井井有条,将所有路由器实例化在同一个地方,然后将处理程序放在单独的包中。// package todoroutesfunc 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)        }    }

隔江千里

这个答案基于blackgreen 的 answer。这是我对类似问题的解决方案。我创建了一个超级组(“/api/v1”),然后在它下面添加子组(“users”、“books”)。我能够将子组放入不同的文件中,并向它们发送一个gin.RouterGroup(). 结果,我有了这个漂亮而干净的文件夹结构:controllers/  user_controllers  book_controllersroutes/  user_routes  book_rontrollers  indexmiddlewares/  allmain.gomain.gofunc startServer() {    app := gin.New()    router := app.Group("/api/v1")    routes.AddRoutes(router)    utils.ConnectDatabase()    app.Run(":5500")}路线/book_routes.gopackage routesfunc bookRoutes(superRoute *gin.RouterGroup) {    booksRouter := superRoute.Group("/books")    {        booksRouter.GET("/", controllers.BookControllers.GetBooks)        booksRouter.POST("/", controllers.BookControllers.CreateBook)    }}路线/user_routes.gopackage routesfunc userRoutes(superRoute *gin.RouterGroup) {    booksRouter := superRoute.Group("/users")    {        booksRouter.GET("/", controllers.UserControllers.GetUsers)        booksRouter.POST("/", controllers.UserControllers.CreateUser)    }}路线/index.gofunc AddRoutes(superRoute *gin.RouterGroup) {    bookRoutes(superRoute)    userRoutes(superRoute)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go