如何绕过 "wildcard route id conflicts with existing children in path" 错误?

How to bypass the "wildcard route id conflicts with existing children in path" error?

r.GET("/v1.0/:pageId/page", (&page.API{}).Get)
r.POST("/v1.0/:labelId/label", (&label.API{}).Post)

这是杜松子酒的一个著名问题,这将导致wildcard route id conflicts with existing children in path。但是,我正在编写此脚本以返回用于测试的模拟结果,因此绝对需要保留此 URL 结构。大多数解决方案只使用 2 个通配符来处理它指向的函数中的不同部分。但是,由于这是使用不同的 HTTP 方法(GET 和 POST),所以不可能使用那种方式来解决问题。有没有其他方法可以保留此 URL 结构?

不确定是不是最好的way.This能不能正常工作:

使用群组:

v10Group := r.Group("/v1.0/:id", checkTheId)
{
    v10Group.GET("/page", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "msg":"Now you are trying to visit a page",
            "id_page": c.Param("id"),
        })
    })
    v10Group.GET("/label", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "msg":"Now you are trying to visit a label",
            "id_label": c.Param("id"),
        })
    })
}

还有一个检查id的中间件,保存在gin.Context.

func checkTheId(c *gin.Context)  {
    id := c.Param("id")
    b, err := strconv.Atoi(id) // judge whether it is a number
    if err != nil{
        c.JSON(400,gin.H{
            "msg":"Parameter invalid, Please input a number", 
        })
        c.Abort()
        return
    }
    c.Set("id", b)
}

结果: