Go 如何控制gin 1.4.0+;中缺少URL参数的行为;?

Go 如何控制gin 1.4.0+;中缺少URL参数的行为;?,go,url-routing,httphandler,go-gin,Go,Url Routing,Httphandler,Go Gin,我正在从1.3.0迁移到1.4.0(或1.5.0),我发现1.3.0适用于以下代码片段 router := gin.New() router.GET("/func/:id/details", func(c *gin.Context) { value := c.Param("id") fmt.Printf("value is %v\n", value) }) 即使在请求/func//details(请注意缺少的URLparam)时,也会始终到达处理程序,而1.4.0及以上版本将返

我正在从
1.3.0
迁移到
1.4.0
(或
1.5.0
),我发现
1.3.0
适用于以下代码片段

router := gin.New()
router.GET("/func/:id/details", func(c *gin.Context) {
    value := c.Param("id")
    fmt.Printf("value is %v\n", value)
})
即使在请求
/func//details
(请注意缺少的URL
param
)时,也会始终到达处理程序,而
1.4.0
及以上版本将返回
404

有可能控制这种行为吗?(与在
1.3.0
中的工作方式相同)

我试过使用
1.5.0中介绍的

func main() {
    type Params struct {
        ID string `uri:"id" binding:"required"`
    }
    router := gin.New()
    router.GET("/func/:id/details", func(c *gin.Context) {
        var pp Params
        if err := c.BindUri(&pp); err != nil {
            log.Errorf("failed binding: %v", err)
            c.Status(http.StatusBadRequest)
            return
        }

        log.Printf("params %+v\n", pp)
    })

    if err := router.Run("localhost:8080"); err != nil {
        panic(err)
    }
}

但是调用时,这也会失败(使用
404
)。

我发现问题出在包含以下文档的内部
cleanPath()
函数上:

。。。以下规则将迭代应用,直到没有其他规则 可以通过以下方式进行处理:

  • 将多个斜杠替换为一个斜杠

    如果您在Github上签出最新的主分支,则有一个名为的配置,默认情况下为false。默认情况下,
    RemoveExtraSlash
    不会调用
    cleanPath()

    我所看到的是11月28日添加的,最新提交的
    1.5.0
    是11月24日

    您可以从以下位置下载源代码:

    然后在go.mod文件的末尾进行替换。有新版本时,您只需删除以下行:

    replace github.com/gin-gonic/gin => /home/user/projects/gin
    

    最后,这起作用了。我更新到并使用了默认值
    RemoveExtraSlash
    false
    )来保持所需的行为。
    replace github.com/gin-gonic/gin => /home/user/projects/gin