Go での HTTP ルート ハンドラーの動的管理
Go で HTTP サーバーを操作する場合、動的に変更できる柔軟性があると有益です。アプリケーションを再起動せずにルート ハンドラーを削除します。この記事では、ネイティブ http.ServerMux と人気の Gorilla Toolkit の mux.Router の両方に対するソリューションを提供します。
従来、ルートを管理する 1 つのアプローチは、404 ステータス コードを返すことで無効な機能を処理することでした。ただし、より一般的な解決策には、受信リクエストをインターセプトし、ルートが現在有効かどうかを確認することが含まれます。
この目的のために、有効なフラグが関連付けられたルート ハンドラーのコレクションである Handlers タイプを導入します。 ServeHTTP メソッドは、フラグをチェックしてハンドラーを呼び出すか、404 エラーを返すことによって受信リクエストを処理します。
HandleFunc メソッドは、基礎となるマルチプレクサーにルートを登録し、それらをハンドラー マップに追加します。その後呼び出されるとき、メソッドは有効なハンドラーのみが実行されるようにします。
<code class="go">package main import ( "net/http" "sync" ) type HasHandleFunc interface { HandleFunc(pattern string, handler func(w http.ResponseWriter, req *http.Request)) } type Handler struct { http.HandlerFunc Enabled bool } type Handlers map[string]*Handler func (h Handlers) ServeHTTP(w http.ResponseWriter, r *http.Request) { path := r.URL.Path if handler, ok := h[path]; ok && handler.Enabled { handler.ServeHTTP(w, r) } else { http.Error(w, "Not Found", http.StatusNotFound) } } func (h Handlers) HandleFunc(mux HasHandleFunc, pattern string, handler http.HandlerFunc) { h[pattern] = &Handler{handler, true} mux.HandleFunc(pattern, h.ServeHTTP) } func main() { 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 // the route to '/' is now disabled }) http.Handle("/", mux) http.ListenAndServe(":9020", nil) }</code>
このソリューションを使用すると、ルートを動的に無効または有効にしたり、時間ベースのルーティング パターンを設定したりすることもでき、柔軟なニーズに対応できます。 Go での HTTP ルート管理。
以上がGo で HTTP ルート ハンドラーを動的に管理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。