「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > net/http パッケージ内のハンドラーの登録を解除するにはどうすればよいですか?

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

2024 年 12 月 21 日に公開
ブラウズ:503

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

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