我想獲取命名子路由的路徑,但我下面的代碼不起作用。當我嘗試在非子路由上使用相同的邏輯時,它工作正常。如何獲取命名子路由的路徑?router = mux.NewRouter() // this is a global variablehome := router.Path("/home").Subrouter()home.Methods("GET").HandlerFunc(c.GetHomeHandler).Name("home")home.Methods("POST").HandlerFunc(c.PostHomeHandler)p, err := router.Get("home").URL()if (err != nil) { panic (err) }log.Printf(p.Path)上面給出了這個錯誤:panic: mux: route doesn't have a host or path現在如果我這樣做了 router.HandleFunc("/home", c.GetHomeHandler).Name("home"),它工作得很好。感謝你的幫助。更新:這是一個合理的解決方法,但它避免了創建子路由。對于我上面的示例來說很好,但可能并不理想,因為您將無法獲得 Subroute 的所有好處。router.Path("/home").Methods("GET").HandlerFunc(c.GetHomeHandler).Name("home")router.Path("/home").Methods("POST").HandlerFunc(c.PostHomeHandler)
1 回答

烙印99
TA貢獻1829條經驗 獲得超13個贊
我相信你需要用 PathPrefix 指定你的子路由,然后為了支持 /home 和 /home/ 啟用 StrictSlash (由于這個問題)
router := mux.NewRouter()
home := router.PathPrefix("/home").Subrouter().StrictSlash(true)
home.Path("/").Methods("GET").HandlerFunc(GetHomeHandler).Name("home")
home.Path("/post/").Methods("POST").HandlerFunc(PostHomeHandler).Name("home-post")
p, err := router.Get("home").URL()
if (err != nil) { panic (err) }
log.Printf(p.Path)
p, err = home.Get("home-post").URL()
if (err != nil) { panic (err) }
log.Printf(p.Path)
- 1 回答
- 0 關注
- 207 瀏覽
添加回答
舉報
0/150
提交
取消