使用下面的代码,当我访问 /test2 它以 404 响应 - 未找到。/test1 工作正常。这是为什么?尽管路由器实现了 http.Handler 接口,但不允许嵌套吗?
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
mainRouter := mux.NewRouter()
subRouter := mux.NewRouter()
mainRouter.HandleFunc("/test1", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test1") })
subRouter.HandleFunc("/test2", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test2") })
mainRouter.Handle("/", subRouter)
http.ListenAndServe(":9999", mainRouter)
}
编辑:
我的主要目标是添加一些初始工作,这些工作对于 subRouter 中的所有路由都是通用的,并且仅适用于它们。更具体地说,我想使用Negroni作为我的中间件编排器。在 Negroni 网站上有一个将中间件添加到路由组的示例:
router := mux.NewRouter()
adminRoutes := mux.NewRouter()
// add admin routes here
Create a new negroni for the admin middleware
router.Handle("/admin", negroni.New(
Middleware1,
Middleware2,
negroni.Wrap(adminRoutes),
))
Negroni 基本上执行每个参数的 ServeHTTP 方法,因为它们都实现了 http.Handler。它按顺序执行它们,因此路由器路由将在最后。
我熟悉Subrouter
Mux 中的概念,但是我不能以与上面示例类似的方式使用它,特别是,我不能在 mainRouter 和它的Subrouter
. 这就是嵌套看起来更灵活的原因。