ホームページ >バックエンド開発 >Golang >同じポート上で複数の http.ServeMux インスタンスを結合するにはどうすればよいですか?

同じポート上で複数の http.ServeMux インスタンスを結合するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 10:18:02796ブラウズ

How to Combine Multiple http.ServeMux Instances on the Same Port?

複数の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。