В итоге я написал свою собственную функцию сопоставления и использовал пакет регулярных выражений go. Это было очень легко сделать, и вот пример:
import (
...
"net/http"
"net/url"
"regexp"
"github.com/gorilla/mux"
...
)
...
muxRouter := mux.NewRouter()
muxRouter.
Methods("GET", "POST").
Schemes("https").
MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool {
match, _ := regexp.MatchString("/users.*", r.URL.Path)
// TODO handle error from regex
return match
}).
HandlerFunc(m.ServeHTTP)
Ключ к использованию:
HandlerFunc(f func(http.ResponseWriter, *http.Request))
а не:
HandleFunc(path string, f func(http.ResponseWriter, *http.Request))
.
HandlerFunc
должен прийти после ваших совпадений. Это позволит вам написать свою собственную функцию сопоставления.
Производительность
В моем случае это работает хорошо, но если вам нужна более высокая производительность, вы можете попробовать использовать предварительно скомпилированный r, _ := regexp.Compile("p([a-z]+)ch")
.
Возможно, вам потребуется использовать структуру с f func(http.ResponseWriter, *http.Request)
, в которой уже есть шаблон регулярного выражения перед компиляцией, сохраненный в структуре.
Примеры регулярных выражений Go:
https://gobyexample.com/regular-expressions а>
Иди в город! Надеюсь, вы сочтете это полезным.
person
jlonganecker
schedule
28.09.2016