目次
net/http での動的ハンドラーの登録と登録解除の処理
カスタム ハンドラー登録の実装
ハンドラーの登録解除
カスタマイズ可能な Web サーバーの実装
ホームページ バックエンド開発 Golang Go の net/http パッケージで HTTP ハンドラーを動的に登録および登録解除するにはどうすればよいですか?

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

Nov 05, 2024 pm 12:50 PM

How can you dynamically register and unregister HTTP handlers in Go's net/http package?

net/http での動的ハンドラーの登録と登録解除の処理

net/http で、ランタイムに登録されたハンドラーを処理するには、カスタム アプローチが必要です。 HTTP サーバーはハンドラーを登録するためのメカニズムを提供しますが、ハンドラーを動的に登録解除する機能がありません。

カスタム ハンドラー登録の実装

ハンドラーを動的に作成および登録するには、カスタム HandlerFactory を使用できます。これは、一意の ID を持つ新しいハンドラーを生成し、http.Handle を使用して登録するように設計できます。たとえば、「/create」ハンドラーは、ID を増加させて MyHandler インスタンスを生成し、特定の URL パターンにマップできます。

<code class="go">type HandlerFactory struct {
    handler_id int
}

func (hf *HandlerFactory) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    hf.handler_id++
    handler := MyHandler{hf.handler_id}
    handle := fmt.Sprintf("/%d/", hf.handler_id)
    http.Handle(handle, &amp;handler)
}</code>
ログイン後にコピー

ハンドラーの登録解除

未登録のハンドラーを提供するには、以下が必要です。元の ServeMux を拡張し、登録解除メソッドを含むカスタム ServerMux を作成します。

<code class="go">type MyMux struct {
    http.ServeMux
    mu sync.Mutex
}

func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    del(mux.m, pattern)

    // Handle additional error checking or setup here
}</code>
ログイン後にコピー

カスタマイズ可能な Web サーバーの実装

このカスタム ServerMux を使用するには、新しい ServerMux をインスタンス化してラップします。 http.Handler:

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

srv := &amp;http.Server{
    Addr:    "localhost:8080",
    Handler: mux,
}

go srv.ListenAndServe()

// Deregister handlers as needed
mux.Deregister("/123/*")</code>
ログイン後にコピー

を使用して HTTP サーバー内でこれを実行すると、ハンドラーを動的に登録および登録解除できるため、ランタイムで生成された URL パターンの処理に必要な柔軟性が得られます。

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

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

See all articles