Angeben von Platzhaltern in Mustern für HTTP-Handler
Beim Erstellen von Handlern mit http.Handler oder http.HandleFunc möchten Sie möglicherweise Platzhalter in angeben das Muster so, dass es mit einem Bereich von URLs übereinstimmt. Leider sind die Muster für diese Funktionen keine regulären Ausdrücke und unterstützen standardmäßig keine Platzhalter.
Stattdessen können Sie Ihren eigenen benutzerdefinierten Handler erstellen, der den Mustervergleich mithilfe regulärer Ausdrücke oder eines anderen gewünschten Musters unterstützt. Hier ist ein Beispiel für die Verwendung regulärer Ausdrücke:
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) }
Durch die Implementierung Ihres eigenen benutzerdefinierten Handlers erhalten Sie die Flexibilität, Ihre eigene Mustervergleichslogik zu definieren und je nach Bedarf verschiedene Arten von URLs zu verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich Platzhalter in URL-Mustern für HTTP-Handler abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!