同じポート番号でサービスを提供する必要がある http.ServeMux の 2 つのインスタンスを考えると、これを実現する方法は複数あります。
http.ServeMux は http.Handler インターフェイスを実装しているため、別のマルチプレクサ内でネストできます。 1 つの例は、StripPrefix() 関数を使用して、リクエスト URL からプレフィックスを取り除き、それをネストされたマルチプレクサーに渡すハンドラーを作成することです。
<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>
もう 1 つのアプローチは、2 つのマルチプレクサーを結合するカスタム ハンドラーを作成することです。
<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>
このアプローチでは、CombinedMux ハンドラーはマルチプレクサーのリストを反復処理し、処理ロジックを順番に各マルチプレクサーに委任します。この方法では、ネストされたマルチプレクサーのアプローチとは異なり、リクエストごとに複数のハンドラーが呼び出される可能性があることに注意してください。
どちらのアプローチでも、複数の http.ServeMux インスタンスを組み合わせて同じポート番号でサービスを提供する方法が提供されます。要件に最も適したアプローチを選択してください。
以上がGo で複数の HTTP マルチプレクサーを組み合わせるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。