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)
}
}
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)
}
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报