我有以下路由器:func testHttp() { r := mux.NewRouter() s := r.PathPrefix("/cmd").Subrouter() s.HandleFunc("/{cmd}", cmd) http.Handle("/", r) http.ListenAndServe(":8090", nil)}當我發出這樣的請求時,localhost:8090/cmd/ls -lacmd 處理程序會正確執行。但是,如果我傳遞類似的內容,localhost:8090/cmd/ls -la /home/foo我會得到 404。這意味著 gorilla/mux 在檢測到 / 時保持匹配。那么如何配置它,以便特定匹配路徑(在本例中為 /cmd/)之后的所有內容都被視為該路徑的參數?想必我只能求助于使用 GET 參數,但是如果也使用 /rest-endpoint/params-having/ 也可以實現這一點嗎?
1 回答

瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
/ 是 URL 的目錄分隔符,因此 mux 所做的事情是正確的,它分隔和匹配由 / 分隔的段。如果要ls -la /home/foo
作為路徑參數傳遞,則應轉義 / 字符,并寫入 %2F。然后 mux 將正確運行。
另一種選擇是將處理程序安裝到 PathPrefix /cmd/。然后,您必須在處理程序中解析路徑的剩余部分,但您可以按照您想要的方式處理“/”。
- 1 回答
- 0 關注
- 113 瀏覽
添加回答
舉報
0/150
提交
取消