rest - Gin 错误 panic : wildcard route conflicts with existing children

标签 rest go routing web-frameworks

我使用 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/

相关文章:

angularjs - Angular 路由异步授权

php - Laravel 4 - Route::resource 与 Route::controller。使用哪个?

ruby-on-rails - 使用 authlogic_api 访问 Rails REST API

python - 如何构建返回自定义模型列表的 Django REST-Api?

go - 在 Go 反向代理中在 handleFunc 和 modifyResponse 之间共享上下文

forms - Golang 中完整 HTML POST 表单数据的位置

javascript - 使用 Postman 发帖时 Req 没有​​正文

html - 我可以使用 Sinatra 的 POST 请求来模拟 PUT 或 DELETE 请求吗?

go - 修改给定字段名称和值映射的结构值

android - 使用 Firebase Auth 和 ChangeNotifierProvider 进行 Flutter 路由