gpt4 book ai didi

go - 运行前如何通过gin合并多个路由器

转载 作者:行者123 更新时间:2023-12-01 22:35:49 26 4
gpt4 key购买 nike

可以说我在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的 菜单路线子菜单路线
但是在 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.Path, a.HandlerFunc)
}
}
rt.Run(":8080")
}

关于go - 运行前如何通过gin合并多个路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63387707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com