Go で複数の HTTP マルチプレクサーを組み合わせるにはどうすればよいですか?
Go で複数の HTTP マルチプレクサーを結合する
同じポート番号でサービスを提供する必要がある 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
