複数の http.ServeMux インスタンスの結合
同じネットワーク アドレスとポートで複数の http.ServeMux インスタンスにサービスを提供するには、combinedMux 関数を使用します。次のように実装されます:
<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>
この関数は、提供された ServeMux インスタンスを反復処理して、指定されたリクエストに最初に一致するハンドラーを提供する新しい http.Handler を作成します。何も見つからない場合は、404 Not Found 応答が返されます。
代替アプローチ: ServeMux インスタンスをネストする
同じ結果を達成する別の方法は、ServeMux をネストすることです。相互内のインスタンス。これは、http.ServeMux が http.Handler インターフェイスを実装しているため可能です。
たとえば、このアプローチを使用して、同じポートとホストで muxA と muxB を提供するには、次のようにします。
<code class="go">rootMux := http.NewServeMux() rootMux.Handle("/muxa/", muxA) rootMux.Handle("/muxb/", muxB) http.ListenAndServe(":8080", rootMux)</code>
この例では、この場合、rootMux はルート URL へのすべてのリクエストを処理し、/muxa/ および /muxb/ へのリクエストを対応する ServeMux インスタンスに委任します。ネストされた各 ServeMux は、独自のサブパス プレフィックス (たとえば、muxA の /muxa/) を処理する必要があることに注意してください。
以上が同じポート上で複数の http.ServeMux インスタンスを結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。