Combinaison de plusieurs instances http.ServeMux
Pour servir plusieurs instances http.ServeMux sur la même adresse réseau et le même port, la fonction combinéeMux peut être implémenté comme suit :
<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>
Cette fonction crée un nouveau http.Handler qui parcourt les instances ServeMux fournies et sert le premier gestionnaire correspondant pour la requête donnée. Si aucun n'est trouvé, une réponse 404 Not Found est renvoyée.
Approche alternative : imbrication des instances ServeMux
Une autre façon d'obtenir le même résultat consiste à imbriquer le ServeMux instances les unes dans les autres. Ceci est possible car un http.ServeMux implémente l'interface http.Handler.
Par exemple, pour servir muxA et muxB sur le même port et hôte en utilisant cette approche :
<code class="go">rootMux := http.NewServeMux() rootMux.Handle("/muxa/", muxA) rootMux.Handle("/muxb/", muxB) http.ListenAndServe(":8080", rootMux)</code>
Dans ce Dans ce cas, rootMux traitera toutes les requêtes adressées à son URL racine et déléguera les requêtes à /muxa/ et /muxb/ aux instances ServeMux correspondantes. Notez que chaque ServeMux imbriqué devra gérer son propre préfixe de sous-chemin (par exemple, /muxa/ pour muxA).
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!