我使用 https://github.com/gin-gonic/gin我正在尝试实现这样的嵌套路由:
// SetupRouter initialize routes and handlers
func SetupRouter() *gin.Engine {
r := gin.Default()
r.GET("/", controllers.Welcome)
r.GET("/resources", controllers.GetResources)
r.GET("/resources/otherroute", controllers.GetOResources)
r.GET("/resources/:id", controllers.GetResourcesByID)
r.GET("/resources/:id/sub-resources", GetSubResources)
r.GET("/resources/:id/sub-resources/:srid", GetSubResourcesByID)
r.GET("/resources/:id/sub-resources/:srid/ssub-resources", GetSSubResources)
r.GET("/resources/:id/sub-resources/:srid/ssub-resources/:ssrid", GetSSubResourcesByID)
// .... etc.
return r
}
但是我遇到了奇怪的错误:
[GIN-debug] GET / --> github.com/badis/so-
gin-nested-routes/controllers.Welcome (3 handlers)
[GIN-debug] GET /resources --> github.com/badis/so-gin-nested-routes/controllers.GetResources (3 handlers)
[GIN-debug] GET /resources/otherroute --> github.com/badis/so-gin-nested-routes/controllers.GetOResources (3 handlers)
[GIN-debug] GET /resources/:id --> github.com/badis/so-gin-nested-routes/controllers.GetResourcesByID (3 handlers)
panic: wildcard route ':id' conflicts with existing children in path '/resources/:id'
goroutine 1 [running]:
github.com/gin-gonic/gin.(*node).insertChild(0xc0002516c0, 0xc0001edc01, 0xc0002325eb, 0x3, 0xc0002325e0, 0xe, 0xc000224300, 0x3, 0x3)
/home/badis/go/src/github.com/gin-gonic/gin/tree.go:294 +0x807
github.com/gin-gonic/gin.(*node).addRoute(0xc0002516c0, 0xc0002325e0, 0xe, 0xc000224300, 0x3, 0x3)
/home/badis/go/src/github.com/gin-gonic/gin/tree.go:255 +0x4ea
而且我无法在 SO 内部或外部找到令人满意的解决方案。
如果您想快速重现问题,请查看此处:https://github.com/badis/so-question-gin-routes
最佳答案
试试这个:
// SetupRouter initialize routes and handlers
func SetupRouter() *gin.Engine {
r := gin.Default()
r.GET("/", controllers.Welcome)
r.GET("/resources", controllers.GetResources)
r.GET("/resources/otherroute", controllers.GetOResources)
resources := r.Group("/resources/:rid")
{
resources.GET("", controllers.GetResourcesByID)
resources.GET("otherroute", controllers.GetOResources)
resources.GET("sub-resources", controllers.GetSubResources)
subResources := resources.GET("sub-resources/:srid")
{
subResources.GET("", GetSubResourcesByID)
subResources.GET("/ssub-resources", GetSSubResources)
subResources.GET("/ssub-resources/:ssrid", GetSSubResourcesByID)
}
}
// .... etc.
return r
}
关于rest - Gin 错误 panic : wildcard route conflicts with existing children,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59147492/