Spécification des caractères génériques dans les modèles pour les gestionnaires HTTP
Lors de la création de gestionnaires à l'aide de http.Handler ou http.HandleFunc, vous souhaiterez peut-être spécifier des caractères génériques dans le modèle pour correspondre à une plage d’URL. Malheureusement, les modèles de ces fonctions ne sont pas des expressions régulières et ne prennent pas en charge les caractères génériques par défaut.
Au lieu de cela, vous pouvez créer votre propre gestionnaire personnalisé qui prend en charge la correspondance de modèles à l'aide d'expressions régulières ou de tout autre modèle souhaité. Voici un exemple utilisant des expressions régulières :
import ( "net/http" "regexp" ) 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) }
En implémentant votre propre gestionnaire personnalisé, vous bénéficiez de la flexibilité nécessaire pour définir votre propre logique de correspondance de modèles et gérer différents types d'URL selon vos besoins.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!