go - 如何从 gorilla mux.Router过滤一些路径

标签 go routing gorilla

我只想匹配来自 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/

相关文章:

go - SHA1 encoding with secret,相当于PHP hash_hmac

go - 合并两个关闭 channel

php - Symfony 3 路由 : No route found for "GET/user/add"

Go 的 session 中间件?

Golang rest api并发

go - 如何在 gorilla Mux的Get Subrouter中将特定中间件用于特定路由

go - 字符串和整数连接问题golang

html - go - 使用继承渲染 html/模板

php - Zend URL 参数 - 隐藏键和显示值

routing - Rails Action Controller 中的未定义方法 `devise_for'