Correspondance avancée de modèles de gestionnaire avec des caractères génériques à l'aide de gestionnaires personnalisés
Lors de l'utilisation de http.HandleFunc pour définir des modèles de routage dans Go, les mécanismes intégrés n'offre pas de support générique. Cela peut constituer un facteur limitant pour la capture de composants d'URL dynamiques.
Gestionnaire personnalisé avec correspondance de modèles d'expressions régulières
Pour surmonter cette limitation, il est possible de créer un gestionnaire personnalisé qui prend en charge la correspondance de modèles flexible à l'aide d'expressions régulières. Voici un exemple :
import ( "net/http" "regexp" ) type route struct { pattern *regexp.Regexp handler http.Handler } type RegexpHandler struct { routes []*route } // Handler adds a route to the custom handler. func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) { h.routes = append(h.routes, &route{pattern, handler}) } // HandleFunc adds a function-based route to the custom handler. func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) { h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)}) } // ServeHTTP iterates through registered routes and checks if any pattern matches the request. If a match is found, the corresponding handler is invoked. 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, return a 404 response. http.NotFound(w, r) }
Utilisation :
Exemple d'utilisation du gestionnaire personnalisé pour gérer les URL avec des caractères génériques :
import ( "log" "net/http" ) func main() { rh := &RegexpHandler{} // Define a regular expression for capturing any valid URL string. pattern := regexp.MustCompile(`/groups/.*/people`) rh.HandleFunc(pattern, peopleInGroupHandler) // Start the web server and use the custom handler. log.Fatal(http.ListenAndServe(":8080", rh)) }
Cette approche vous permet de créer des modèles de routage flexibles au-delà des limites de http.HandleFunc tout en conservant le contrôle sur la logique de correspondance de chemin au sein du gestionnaire personnalisé.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3