问题描述
让我们说一个subemenuRoutes.go
文件中有一些路由,如下所示:
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetSubMenuRoutes return a group of routes for login
func GetSubMenuRoutes() *gin.Engine{
router := gin.Default()
menuRoutes := router.Group("/submenu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallsubmenus",middlewares.GetAllSubMenus)
}
}
return router
}
我是这样从main.go
运行它们的:
package main
import(
"fmt"
"github.com/IamFrost/api-5/pkg/routes"
"github.com/gin-gonic/gin"
"github.com/gin-contrib/cors"
)
func main(){
fmt.Println("from main")
router := gin.Default()
router = routes.GetSubMenuRoutes()
router.Use(cors.Default())
router.Run(":3000")
}
到此为止,一切正常。
现在我的问题是:
让我说文件menuRoutes.go
中还有其他路由:
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetMenuRoutes return a group of routes for login
func GetMenuRoutes() *gin.Engine{
router := gin.Default()
menuRoutes := router.Group("/menu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallmenus",middlewares.GetAllMenus)
}
}
return router
}
但是在我的main.go
中,您看到的是我在跑步前完成的
router = routes.GetSubMenuRoutes()
那么我该如何合并来自routes.GetSubMenuRoutes()
和routes.GetMenuRoutes()
的所有路由
在我致电router.Run
中的main.go
之前?
更新:
正如他们的文档所说,我在main.go
中想要这样的东西,但是我的路线来自函数。您会看到:我无法像v1或v2这样对我的路由进行硬编码,因为我的路由来自getMenuRoute()
和getSubmenuRoute()
函数
func main() {
router := gin.Default()
// Simple group: v1
v1 := router.Group("/v1")
{
v1.POST("/login",loginEndpoint)
v1.POST("/submit",submitEndpoint)
v1.POST("/read",readEndpoint)
}
// Simple group: v2
v2 := router.Group("/v2")
{
v2.POST("/login",loginEndpoint)
v2.POST("/submit",submitEndpoint)
v2.POST("/read",readEndpoint)
}
router.Run(":8080")
}
解决方法
您可以将其作为参数传递给路由器函数,而不必在每个函数中声明gin.Default()
。
func GetMenuRoutes(router *gin.Engine){
menuRoutes := router.Group("/menu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallmenus",middlewares.GetAllMenus)
}
}
return
}
或
您可以使用以下方法将所有这些路由注册到主路由器上 一个for循环。
您的main func()
将包含以下几行
func main() {
v1 := getGroup1().Routes()
v2 := getGroup2().Routes()
rt := gin.Default()
for _,a := range v1 {
{
rt.Handle(a.Method,a.Path,a.HandlerFunc)
}
}
for _,a := range v2 {
{
rt.Handle(a.Method,a.HandlerFunc)
}
}
rt.Run(":8080")
}
,
@ whitespace的答案很好。但是我找到了另一种解决方案。
所以,正如您所记得的,我有很多路由来自2个函数。
我需要合并它们,然后再将它们全部调用
所以我的第一个路由功能来自: menuRoutes.go
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetMenuRoutes return a group of routes for menu
func GetMenuRoutes(router *gin.Engine) *gin.Engine{
menuRoutes := router.Group("/menu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallmenus",middlewares.GetAllMenus)
}
}
return router
}
我的第二条路线功能来自: submenuRoutes.go
package routes
import(
"github.com/IamFrost/api-5/pkg/middlewares"
"github.com/gin-gonic/gin"
)
// GetSubMenuRoutes return a group of routes for submenu
func GetSubMenuRoutes(router *gin.Engine) *gin.Engine{
menuRoutes := router.Group("/submenu")
{
getRoutes := menuRoutes.Group("/get")
{
getRoutes.GET("/getallsubmenus",middlewares.GetAllSubMenus)
}
}
// router.GET("/getallsubmenus",middlewares.GetAllSubMenus)
return router
}
最后,我将两个路由组合并到: main.go
package main
import(
"fmt"
"github.com/IamFrost/api-5/pkg/routes"
"github.com/gin-gonic/gin"
"github.com/gin-contrib/cors"
)
func main(){
fmt.Println("from main")
router := gin.Default()
// router = routes.GetSubMenuRoutes()
routes.GetMenuRoutes(router)
routes.GetSubMenuRoutes(router)
router.Use(cors.Default())
router.Run(":3000")
}