net/http でのハンドラーの登録解除
net/http では、実行時にハンドラーを登録および登録解除できます。これにより、Web サーバーの動的な構成が可能になります。
ハンドラーの登録
次のコードは、HandlerFactory を使用して実行時にハンドラーを登録する方法を示しています。
<code class="go">package main import ( "fmt" "net/http" ) type MyHandler struct { id int } func (hf *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, r.URL.Path) } // Creates MyHandler instances and registers them as handlers at runtime 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, &handler) } func main() { factory := HandlerFactory{0} http.Handle("/create", &factory) http.ListenAndServe("localhost:8080", nil) }</code>
ハンドラーの登録解除
ハンドラーの登録を解除するには、カスタム ServerMux を作成して使用できます。このカスタム ServerMux には、パターンからハンドラーへのマッピングをマップから削除する Deregister メソッドが含まれています:
<code class="go">// TODO: check if registered and return error if not. // TODO: possibly remove the automatic permanent link between /dir and /dir/. func (mux *MyMux) Deregister(pattern string) error { mux.mu.Lock() defer mux.mu.Unlock() del(mux.m, pattern) return nil }</code>
このカスタム ServerMux の使用:
<code class="go">mux := newMux() mux.Handle("/create", &factory) srv := &http.Server { Addr: localhost:8080 Handler: mux, } srv.ListenAndServe()</code>
このカスタム ServerMux からハンドラーの登録を解除すると、 ListenAndServe() によるメッセージのルーティングに影響を与えることなく、別の goroutine から安全に実行できます。
以上がGo の `net/http` パッケージのハンドラーの登録を解除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。