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

Go の net/http で HTTP ハンドラーの登録を解除するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-05 17:01:02
オリジナル
924 人が閲覧しました

How to Deregister HTTP Handlers in Go's net/http?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート