ホームページ  >  記事  >  バックエンド開発  >  Golang HTTP サーバーで Mux ハンドラーを動的に変更するにはどうすればよいですか?

Golang HTTP サーバーで Mux ハンドラーを動的に変更するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 15:21:02210ブラウズ

How Can I Dynamically Change Mux Handlers in Golang HTTP Servers?

Golang HTTP サーバーで Mux ハンドラーを動的に変更する方法

Go では、http.ServeMux と Gorilla の mux.Router が処理用の多用途ツールを提供します。 HTTP ルート。ただし、アプリケーションを再起動せずに、既存のルートに関連付けられたハンドラー関数を変更する組み込みメカニズムはありません。

考えられる解決策:

オプション 1 : 有効/無効フラグ付きのカスタム ハンドラー ラッパー

このアプローチには、実際のハンドラー関数を埋め込み、有効なフラグを含むカスタム ハンドラー タイプの作成が含まれます。その後、カスタム ハンドラーを mux に追加できます。フラグが true に設定されている場合、ハンドラーが提供されます。

<code class="go">type Handler struct {
    http.HandlerFunc
    Enabled bool
}

type Handlers map[string]*Handler

// Implementation of ServeHTTP that checks if the handler is enabled
func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path
    if handler, ok := h[path]; ok &amp;&amp; handler.Enabled {
        handler.ServeHTTP(w, r)
    } else {
        http.Error(w, "Not Found", http.StatusNotFound)
    }
}</code>

その後、このカスタム ハンドラー タイプを http.ServeMux または Gorilla/mux で使用できます。ルートを動的に有効または無効にします。

http.ServeMux の例:

<code class="go">mux := http.NewServeMux()
handlers := Handlers{}

handlers.HandleFunc(mux, "/", func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("this will show once"))
    handlers["/"].Enabled = false
})

http.Handle("/", mux)</code>

オプション 2: URL ブラックリストを持つミドルウェア

あるいは、リクエストされた URL を無効なルートのリストと照合するミドルウェアを実装することもできます。 URL が無効なルートと一致する場合、ミドルウェアはハンドラーの実行を阻止し、カスタム応答を返すことができます。

例:

<code class="go">func DisableRouteMiddleware(disabledRoutes []string) func(http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            for _, route := range disabledRoutes {
                if r.URL.Path == route {
                    http.Error(w, "Disabled", http.StatusNotFound)
                    return
                }
            }
            next.ServeHTTP(w, r)
        })
    }
}</code>

その後、このミドルウェアを使用できます。すべてのハンドラーをマルチプレクサに追加する前にラップします。

どちらの方法でも、再起動を必要とせずにアプリケーション内のルートを動的に無効または有効にすることができます。どのオプションを使用するかは、特定の要件と必要な柔軟性のレベルによって異なります。

以上がGolang HTTP サーバーで Mux ハンドラーを動的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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