Les modèles pour http.Handler et http.HandleFunc ne sont pas des expressions régulières ou des globs. Il n'y a pas de moyen de spécifier des caractères génériques. Ils sont documentés ici .
Cela dit, il n’est pas très difficile de créer votre propre gestionnaire qui peut utiliser des expressions régulières ou tout autre type de modèle souhaité. En voici un qui utilise des expressions régulières (compilées, mais non testées):
type route struct {
pattern *regexp.Regexp
handler http.Handler
}
type RegexpHandler struct {
routes []*route
}
func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) {
h.routes = append(h.routes, &route{pattern, handler})
}
func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) {
h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)})
}
func (h *RegexpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
for _, route := range h.routes {
if route.pattern.MatchString(r.URL.Path) {
route.handler.ServeHTTP(w, r)
return
}
}
// no pattern matched; send 404 response
http.NotFound(w, r)
}