我只想匹配来自 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
中,比较/验证传入的请求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)
关于go - 如何从 gorilla mux.Router过滤一些路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45211395/