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

标签 go routes go-gin

r.GET("/v1.0/:pageId/page", (&page.API{}).Get)
r.POST("/v1.0/:labelId/label", (&label.API{}).Post)
这是一个著名的 Gin 问题,这将导致 wildcard route id conflicts with existing children in path .但是,我正在编写此脚本以返回模拟结果进行测试,因此绝对需要保留此 URL 结构。大多数解决方案只使用 2 个通配符,并处理它指向的函数中的不同部分。但是,由于这是使用不同的 HTTP 方法(GET 和 POST),所以不可能使用这种方法来解决问题。还有其他方法可以保留此 URL 结构吗?

最佳答案

不确定这是否是最好的方法。这可以正常工作:
使用组:

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)
}
结果:
enter image description here
enter image description here
enter image description here

关于go - 如何绕过 "wildcard route id conflicts with existing children in path"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62714311/

相关文章:

url - Azure 域 url 不显示我的页面路由

javascript - Express js 路由器不工作

go - 如何使用 go gin 从 Auth0 jwt token 检索权限

go - 输入错误时,BindJSON不返回错误

go - 连接到Go Gin时的Angular 8 CORS

go - 如何调用反射得到的闭包函数?

go run 命令没有提供足够的信息来调试

go - 无法验证 ECDSA 签名

go - Go 函数中返回变量的个数可变

php - Laravel:从 Controller 重定向到特定网址