在 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 取消註冊處理程序可以從另一個goroutine 安全地完成,不會影響ListenAndServe() 的訊息路由。
以上是如何在 Go 的 net/http 套件中取消註冊處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!