Maison > Article > développement back-end > Comment puis-je implémenter la correspondance par caractères génériques pour les modèles d'URL dans les gestionnaires HTTP de Go ?
Lors de l'enregistrement des gestionnaires avec http.HandleFunc ou http.Handler, il est souhaitable de spécifier des caractères génériques dans le modèle d'URL pour faire correspondre plusieurs chemins . Par exemple, on pourrait vouloir définir un gestionnaire pour toutes les requêtes comme /groups/*/people.
Malheureusement, la correspondance de modèle par défaut pour les gestionnaires HTTP dans Go ne prend pas en charge les caractères génériques. Les modèles ne sont pas des expressions régulières ou des globs, et il n'existe aucun moyen intégré d'exprimer des chemins génériques.
Une solution consiste à générer des fonctions de gestionnaire personnalisées qui utilisent des expressions régulières pour correspondre à des modèles plus complexes. Voici un exemple de gestionnaire personnalisé prenant en charge les expressions régulières :
import ( "net/http" "regexp" ) type RegexpHandler struct { routes []*route } type route struct { pattern *regexp.Regexp handler http.Handler } 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) }
Ce gestionnaire personnalisé vous permet de définir un modèle d'expression régulière et de l'associer à une fonction de gestionnaire. Lorsqu'une requête arrive, le gestionnaire vérifie le chemin de la requête par rapport à ses modèles et l'envoie au gestionnaire associé si une correspondance est trouvée.
Bien que cette approche offre une plus grande flexibilité, elle nécessite un effort de développement supplémentaire et introduit une dépendance sur expressions régulières. Néanmoins, il s'agit d'une option viable pour la correspondance de modèles d'URL complexes avec http.HandleFunc.
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!