Kombinieren mehrerer http.ServeMux-Instanzen
Um mehrere http.ServeMux-Instanzen an derselben Netzwerkadresse und demselben Port bereitzustellen, kann die CombinedMux-Funktion verwendet werden wie folgt implementiert:
<code class="go">func combineMux(muxes ...*http.ServeMux) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var h http.Handler for _, mux := range muxes { if h = mux.Handler(r); h != nil { h.ServeHTTP(w, r) return } } http.NotFound(w, r) }) }</code>
Diese Funktion erstellt einen neuen http.Handler, der die bereitgestellten ServeMux-Instanzen durchläuft und den ersten passenden Handler für die gegebene Anfrage bereitstellt. Wenn keine gefunden werden, wird die Antwort „404 Not Found“ zurückgegeben.
Alternativer Ansatz: ServeMux-Instanzen verschachteln
Eine alternative Möglichkeit, das gleiche Ergebnis zu erzielen, besteht darin, den ServeMux zu verschachteln Instanzen ineinander. Dies ist möglich, weil ein http.ServeMux die http.Handler-Schnittstelle implementiert.
Um beispielsweise muxA und muxB auf demselben Port und Host mit diesem Ansatz bereitzustellen:
<code class="go">rootMux := http.NewServeMux() rootMux.Handle("/muxa/", muxA) rootMux.Handle("/muxb/", muxB) http.ListenAndServe(":8080", rootMux)</code>
Hier In diesem Fall verarbeitet der RootMux alle Anfragen an seine Root-URL und delegiert Anfragen an /muxa/ und /muxb/ an die entsprechenden ServeMux-Instanzen. Beachten Sie, dass jeder verschachtelte ServeMux sein eigenes Unterpfadpräfix verarbeiten muss (z. B. /muxa/ für muxA).
Das obige ist der detaillierte Inhalt vonWie kombiniere ich mehrere http.ServeMux-Instanzen am selben Port?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!