net/http での登録解除のハンドル
net/http の HTTP ハンドラーは、動的に登録および登録解除することができ、リクエストの処理を柔軟に行うことができます。ハンドラーの登録を解除するには、カスタム ServerMux を作成できます。
カスタム ServerMux の実装
Go ソース コード (GOROOT/src/pkg) から ServerMux のコードをコピーします。 /net/http/server.go、837 ~ 939 行目)。 Deregister メソッドをカスタム ServerMux に追加して、パターンとハンドラーのマッピングからハンドラーを削除します。
<code class="go">func (mux *MyMux) Deregister(pattern string) error { mux.mu.Lock() defer mux.mu.Unlock() del(mux.m, pattern) return nil }</code>
使用法
カスタム ServerMux のインスタンスを作成し、通常どおり「/create」ルートを処理します:
<code class="go">mux := newMux() mux.Handle("/create", &factory)</code>
カスタム ServerMux を HTTP サーバーのハンドラーとして設定します:
<code class="go">srv := &http.Server { Addr: localhost:8080 Handler: mux, }</code>
登録解除
ハンドラーの登録を解除するには、ServerMux で Deregister メソッドを呼び出すだけです。
<code class="go">mux.Deregister("/123/*")</code>
これにより、サーバーのルーティング動作が変更され、それ以降の "/123/*" へのリクエストは行われなくなります。
安全な変更
別の goroutine から deregister() を呼び出して ServerMux を変更することは安全であり、サーバーのルーティング ロジックが更新されます。
以上がGo の net/http で HTTP ハンドラーの登録を解除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。