如何过滤来自大猩猩的一些路径 mux.Router

How to filter some path from gorilla mux.Router

我只想匹配 mux.Router 中的一些路由,并对所有其他路由使用相同的处理程序。我该怎么做?

即:具有这些路径:

/general/baz/bro
/general/foo/bar
/general/unknown

我想将第一个与特定处理程序匹配,然后将所有其他与默认处理程序匹配。

我尝试过类似的方法但没有成功:

r.Methods("GET").PathPrefix("/general").Handler(defaultHandler)
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)

我期待 bazBroHandler 处理 /general/baz/bro 路径,而 defaultHandler 所有其他以 /general

开头

实现此目的的一种方法是使用 MatcherFunc。在MatcherFunc、compare/verify传入请求Path,即:

//Default handler
r.MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool {
    return r.URL.Path != "/general/baz/bro" && strings.HasPrefix(r.URL.Path, "/general") && r.Method == "GET"
}).Handler(defaultHandler)

//Specific handler
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)

最后我才意识到我需要颠倒顺序:

r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)
r.Methods("GET").PathPrefix("/general").Handler(defaultHandler)

现在一切正常!