Erweiterter Handler-Musterabgleich mit Platzhaltern mithilfe benutzerdefinierter Handler
Bei Verwendung von http.HandleFunc zum Definieren von Routing-Mustern in Go die integrierten Mechanismen Bieten Sie keine Wildcard-Unterstützung an. Dies kann ein einschränkender Faktor für die Erfassung dynamischer URL-Komponenten sein.
Benutzerdefinierter Handler mit Mustervergleich für reguläre Ausdrücke
Um diese Einschränkung zu überwinden, ist es möglich, einen benutzerdefinierten Handler zu erstellen unterstützt den flexiblen Mustervergleich mithilfe regulärer Ausdrücke. Hier ist ein Beispiel:
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) }
Verwendung:
Beispielverwendung des benutzerdefinierten Handlers zur Verarbeitung von URLs mit Platzhaltermustern:
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)) }
Mit diesem Ansatz können Sie flexible Routingmuster erstellen, die über die Einschränkungen von http.HandleFunc hinausgehen und gleichzeitig die Kontrolle über die Pfadvergleichslogik innerhalb des benutzerdefinierten Handlers behalten.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3