Go の net/http パッケージで HTTP ハンドラーを動的に登録および登録解除するにはどうすればよいですか?
Nov 05, 2024 pm 12:50 PMnet/http での動的ハンドラーの登録と登録解除の処理
net/http で、ランタイムに登録されたハンドラーを処理するには、カスタム アプローチが必要です。 HTTP サーバーはハンドラーを登録するためのメカニズムを提供しますが、ハンドラーを動的に登録解除する機能がありません。
カスタム ハンドラー登録の実装
ハンドラーを動的に作成および登録するには、カスタム HandlerFactory を使用できます。これは、一意の ID を持つ新しいハンドラーを生成し、http.Handle を使用して登録するように設計できます。たとえば、「/create」ハンドラーは、ID を増加させて MyHandler インスタンスを生成し、特定の URL パターンにマップできます。
<code class="go">type HandlerFactory struct { handler_id int } func (hf *HandlerFactory) ServeHTTP(w http.ResponseWriter, r *http.Request) { hf.handler_id++ handler := MyHandler{hf.handler_id} handle := fmt.Sprintf("/%d/", hf.handler_id) http.Handle(handle, &handler) }</code>
ハンドラーの登録解除
未登録のハンドラーを提供するには、以下が必要です。元の ServeMux を拡張し、登録解除メソッドを含むカスタム ServerMux を作成します。
<code class="go">type MyMux struct { http.ServeMux mu sync.Mutex } func (mux *MyMux) Deregister(pattern string) error { mux.mu.Lock() defer mux.mu.Unlock() del(mux.m, pattern) // Handle additional error checking or setup here }</code>
カスタマイズ可能な Web サーバーの実装
このカスタム ServerMux を使用するには、新しい ServerMux をインスタンス化してラップします。 http.Handler:
<code class="go">mux := new(MyMux) mux.Handle("/create", &factory) srv := &http.Server{ Addr: "localhost:8080", Handler: mux, } go srv.ListenAndServe() // Deregister handlers as needed mux.Deregister("/123/*")</code>
を使用して HTTP サーバー内でこれを実行すると、ハンドラーを動的に登録および登録解除できるため、ランタイムで生成された URL パターンの処理に必要な柔軟性が得られます。
以上がGo の net/http パッケージで HTTP ハンドラーを動的に登録および登録解除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

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

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

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

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

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

ホットトピック











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

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

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

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

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

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?
