首頁  >  文章  >  後端開發  >  如何在 Go 的 net/http 中登出 HTTP 處理程序?

如何在 Go 的 net/http 中登出 HTTP 處理程序?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-05 17:01:02829瀏覽

How to Deregister HTTP Handlers in Go's net/http?

處理net/http 中的註銷

net/http 中的HTTP 處理程序可以動態註冊和註銷,以提供處理請求的靈活性。若要取消註冊處理程序,可以建立自訂 ServerMux。

實作自訂ServerMux

從Go 原始碼(GOROOT/src/pkg) 複製ServerMux 的程式碼/net/http/server.go,第837-939行)。將Deregister 方法新增至自訂ServerMux,以從模式到處理程序對應中刪除處理程序:

<code class="go">func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    del(mux.m, pattern)
    return nil
}</code>

用法

建立自訂ServerMux 的實例並像平常一樣處理「/create」路由:

<code class="go">mux := newMux()
mux.Handle("/create", &factory)</code>

將自訂ServerMux 設定為HTTP 伺服器的處理程序:

<code class="go">srv := &http.Server {
    Addr: localhost:8080
    Handler: mux,
}</code>

取消註冊

取消註冊
<code class="go">mux.Deregister("/123/*")</code>

取消註冊

取消註冊

取消註冊取消註冊取消註冊取消註冊取消註冊 要取消註冊處理程序,只需呼叫ServerMux 上的Deregister 方法即可:這將修改伺服器的路由行為,後續對「/123/*」的請求將不再被處理。由先前註冊的處理程序處理。 安全修改透過從另一個 goroutine 呼叫 deregister() 來修改 ServerMux 是安全的,並且會更新伺服器的路由邏輯。

以上是如何在 Go 的 net/http 中登出 HTTP 處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn