2 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
只需創(chuàng)建一個(gè)超級(jí)組,然后在其下創(chuàng)建您的組。代碼示例來說明我的意思:
router := gin.New()
superGroup := router.Group("/api")
{
userGroup := superGroup.Group("/user")
{
// user group handlers
}
todoGroup := superGroup.Group("/todo")
{
// todo group handlers
}
}
使用此代碼,您無法像現(xiàn)在那樣創(chuàng)建組,因?yàn)槟暮瘮?shù)todorouter.TodoRoutes和userrouter.UserRoutes實(shí)例化它們自己的gin.Engine. 因此,您必須將頂級(jí)引擎和/api組移動(dòng)到一個(gè)共同的地方。
如果需要,您可以將 api 組對(duì)象作為函數(shù)參數(shù)傳遞。例子:
//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",
})
})
}
}
然而,我的建議是讓您的代碼井井有條,將所有路由器實(shí)例化在同一個(gè)地方,然后將處理程序放在單獨(dú)的包中。
// 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)
}
}

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
這個(gè)答案基于blackgreen 的 answer。這是我對(duì)類似問題的解決方案。我創(chuàng)建了一個(gè)超級(jí)組(“/api/v1”),然后在它下面添加子組(“users”、“books”)。我能夠?qū)⒆咏M放入不同的文件中,并向它們發(fā)送一個(gè)gin.RouterGroup(). 結(jié)果,我有了這個(gè)漂亮而干凈的文件夾結(jié)構(gòu):
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)
}
- 2 回答
- 0 關(guān)注
- 128 瀏覽
添加回答
舉報(bào)