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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-05 14:33:021309ブラウズ

How can I Unregister Handlers in Go's `net/http` Package?

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

net/http では、ハンドラーを登録すると、URL パターンが特定の HTTP ハンドラーに関連付けられます。ただし、URL パターンのハンドラーを作成する場合と同様に、実行時にハンドラーの登録を解除する必要がある場合があります。

提供された例は、「/123」のような URL のハンドラーを動的に作成するハンドラー ファクトリの作成を示しています。 /」を選択して登録します。 「/123/」のハンドラーを登録解除するには、対応する「/destroy/123」 URL がありません。

登録解除機能を実装するには、GOROOT からコードをコピーしてカスタム ServerMux を作成できます。 /src/pkg/net/http/server.go。カスタム 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>

このカスタム マルチプレクサを使用するには、HTTP サーバーのハンドラーとして構成できます。別の goroutine から deregister() を呼び出してマルチプレクサを変更することは安全であり、ListenAndServe() によるメッセージのルーティングに影響します。

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

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

登録解除メソッドを使用してカスタム ServerMux を実装することで、ハンドラを管理できるようになります。動的に実行し、実行時に登録を解除します。

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

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