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>
このカスタム 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 サイトの他の関連記事を参照してください。