Ark*_*kon 2 http go mux gorilla
我正在尝试安装 2 个 http 路由器,例如:
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
r := mux.NewRouter()
r.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hi, %q", html.EscapeString(r.URL.Path))
})
http.Handle("/subpath", r)
log.Fatal(http.ListenAndServe(":8080", nil))
Run Code Online (Sandbox Code Playgroud)
然而/subpath/foo归来404 page not found。我正在尝试为特定子路径获取特定路由器,但这似乎不起作用。仅当我将其安装在根目录上/并让多路复用器路由器解析整个路径时,它才有效。理想情况下,我希望多路复用器路由器仅处理相对于其自身根的路径。这是可行的吗?
2件事。
首先,您必须为以斜杠:结尾的路径注册“子路由器” /subpath/,否则只有/subpath路径会路由到它,而不是完整的子路由。
其次,您的r路由器将路径路由/foo到注册的函数,但实际路径将/subpath/foo不匹配/foo,因此不会路由到它。您必须删除/subpath前缀。
工作代码:
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
r := mux.NewRouter()
r.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hi, %q", html.EscapeString(r.URL.Path))
})
http.Handle("/subpath/", http.StripPrefix("/subpath", r))
log.Fatal(http.ListenAndServe(":8080", nil))
Run Code Online (Sandbox Code Playgroud)
编辑:我想我发现了一个可能的重复(它使用标准库ServeMux,但适用相同的原则):将 http.NewServeMux 放入 http.NewServeMux
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |