ホームページ  >  記事  >  バックエンド開発  >  net/http パッケージ内のハンドラーの登録を解除するにはどうすればよいですか?

net/http パッケージ内のハンドラーの登録を解除するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-07 00:04:03919ブラウズ

How Can I Unregister Handlers in the net/http Package?

net/http でのハンドラーの登録解除

net/http では、http.Handle を使用してハンドラーを特定の URL パターンに動的に登録できます。関数。ただし、デフォルトのマルチプレクサーには、ハンドラーを登録解除するメカニズムがありません。

ハンドラーを登録解除する 1 つの方法は、標準の http.ServeMux タイプを拡張するカスタム マルチプレクサーを作成することです。このカスタム マルチプレクサーには、ハンドラーの登録を解除するメソッドを含めることができます。たとえば、次のコードは、Deregister メソッドを追加するカスタム マルチプレクサを定義します。

<code class="go">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
}</code>

カスタム マルチプレクサを定義すると、それを使用してリクエストを処理できます。例:

<code class="go">mux := new(MyMux)
mux.Handle("/create", &factory)

srv := &http.Server{
    Addr:    "localhost:8080",
    Handler: mux,
}
srv.ListenAndServe()</code>

カスタム マルチプレクサーで Deregister メソッドを呼び出すと、対応するハンドラーによるリクエストの処理が停止されます。登録解除を有効にするには、同じカスタム マルチプレクサ インスタンスを使用してハンドラーを登録する必要があることに注意してください。

以上がnet/http パッケージ内のハンドラーの登録を解除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。