我正在努力從 遷移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?)我嘗試過使用BindUri介紹1.5.0func 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但調用時也會失?。◣в校?
1 回答

藍山帝景
TA貢獻1843條經驗 獲得超7個贊
我發現問題出在內部cleanPath()
函數上,文檔如下:
...迭代應用以下規則,直到無法進行進一步處理:
將多個斜杠替換為單個斜杠。
如果你在 Github 上查看最新的 master 分支,就會發現有一個名為“RemoveExtraSlash”的配置,默認情況下為 false。默認情況RemoveExtraSlash
下不會調用cleanPath()
。
我可以看到這是 11 月 28 日添加的,最新提交1.5.0
是 11 月 24 日。
你可以做的是從GitHub下載源代碼:
git?clone?https://github.com/gin-gonic/gin.git?/home/user/projects/gin
然后在 go.mod 文件的末尾進行替換。當有新版本時,您只需刪除該行:
replace?github.com/gin-gonic/gin?=>?/home/user/projects/gin
- 1 回答
- 0 關注
- 92 瀏覽
添加回答
舉報
0/150
提交
取消