Maison >développement back-end >Golang >Comment combiner plusieurs multiplexeurs HTTP dans Go ?
Étant donné deux instances de http.ServeMux que vous devez servir sur le même numéro de port, il existe plusieurs façons d'y parvenir.
Étant donné qu'un http.ServeMux implémente l'interface http.Handler, il peut être imbriqué dans un autre multiplexeur. Un exemple consiste à utiliser la fonction StripPrefix() pour créer un gestionnaire qui supprime un préfixe de l'URL de la requête et le transmet au multiplexeur imbriqué.
<code class="go">rootMux := http.NewServeMux() subMux := http.NewServeMux() // Handle requests to /top_path/sub_path subMux.HandleFunc("/sub_path", myHandleFunc) // Strip the /top_path prefix from the URL before passing it to subMux rootMux.Handle("/top_path/", http.StripPrefix("/top_path", subMux)) http.ListenAndServe(":8000", rootMux)</code>
Une autre approche consiste à créer un gestionnaire personnalisé qui combine les deux multiplexeurs.
<code class="go">import ( "net/http" ) // CombinedMux combines multiple http.ServeMux instances. type CombinedMux struct { muxes []http.Handler } // ServeHTTP implements the http.Handler interface for CombinedMux. func (c *CombinedMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { for _, mux := range c.muxes { mux.ServeHTTP(w, r) } } func main() { muxA, muxB := http.NewServeMux(), http.NewServeMux() // Initialize muxA and muxB combinedMux := &CombinedMux{ muxes: []http.Handler{muxA, muxB}, } http.ListenAndServe(":8080", combinedMux) }</code>
Dans cette approche, le gestionnaire CombinedMux parcourt la liste des multiplexeurs et délègue la logique de service à chacun dans l'ordre. Notez que cette méthode peut entraîner l'appel de plusieurs gestionnaires pour chaque requête, contrairement à l'approche du multiplexeur imbriqué.
Les deux approches offrent des moyens de combiner plusieurs instances http.ServeMux et de les servir sur le même numéro de port. Choisissez l'approche qui correspond le mieux à vos besoins.
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!