net/http でのハンドラーの登録解除
net/http では、http.Handle を使用してハンドラーを特定の URL パターンに動的に登録できます。関数。ただし、デフォルトのマルチプレクサーには、ハンドラーの登録を解除するメカニズムがありません。
ハンドラーの登録を解除する 1 つの方法は、標準の http.ServeMux タイプを拡張するカスタム マルチプレクサーを作成することです。このカスタム マルチプレクサーには、ハンドラーの登録を解除するメソッドを含めることができます。たとえば、次のコードは Deregister メソッドを追加するカスタム マルチプレクサを定義します。
type MyMux struct {
*http.ServeMux
mu sync.Mutex // Guards the m map
m map[string]http.Handler
}
func (mux *MyMux) Deregister(pattern string) error {
mux.mu.Lock()
defer mux.mu.Unlock()
if _, ok := mux.m[pattern]; !ok {
return errors.New("handler not registered")
}
delete(mux.m, pattern)
return nil
}
カスタム マルチプレクサーを定義すると、それを使用してリクエストを処理できます。例:
mux := new(MyMux)
mux.Handle("/create", &factory)
srv := &http.Server{
Addr: "localhost:8080",
Handler: mux,
}
srv.ListenAndServe()
カスタム マルチプレクサーで Deregister メソッドを呼び出すと、対応するハンドラーによるリクエストの処理が停止されます。登録解除を有効にするには、同じカスタム マルチプレクサ インスタンスを使用してハンドラーを登録する必要があることに注意してください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3