」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何取消註冊 net/http 套件中的處理程序?

如何取消註冊 net/http 套件中的處理程序?

發佈於2024-12-21
瀏覽:616

How Can I Unregister Handlers in the net/http Package?

在net/http中取消註冊處理程序

在net/http中,處理程序可以使用http.Handle動態註冊到特定的URL模式功能。但是,預設的多工器不提供取消註冊處理程序的機制。

取消註冊處理程序的一種方法是建立一個擴充標準 http.ServeMux 類型的自訂多工器。此自訂多工器可以包含用於取消註冊處理程序的方法。例如,以下程式碼定義了一個新增 Deregister 方法的自訂多工器:

type MyMux struct {
    *http.ServeMux
    mu sync.Mutex // Guards the m map
    m  map[string]http.Handler
}

func (mux *MyMux) Deregister(pattern string) error {
    mux.mu.Lock()
    defer mux.mu.Unlock()
    if _, ok := mux.m[pattern]; !ok {
        return errors.New("handler not registered")
    }
    delete(mux.m, pattern)
    return nil
}

定義自訂多工器後,就可以使用它來處理請求。例如:

mux := new(MyMux)
mux.Handle("/create", &factory)

srv := &http.Server{
    Addr:    "localhost:8080",
    Handler: mux,
}
srv.ListenAndServe()

在自訂多工器上呼叫 Deregister 方法將停止對應的處理程序為請求提供服務。請注意,必須使用相同的自訂多工器實例來註冊處理程序才能使取消註冊生效。

最新教學 更多>
  • Go 中底線導入的目的是什麼?
    Go 中底線導入的目的是什麼?
    瞭解下劃線導入語句在 Go 程式設計世界中,導入語句前面的底線字元 ( _ ) 具有特定的意義。讓我們探討一下它的意義和用法。 下劃線導入的目的導入語句中的下劃線 (_ ) 表示導入該包只是為了其副作用。它不會從套件中匯入任何函數、方法或變數。 Go 套件中的副作用一些 Go 套件具有初始化函數(通...
    程式設計 發佈於2024-12-21
  • CMake 如何處理 GCC 專案中的調試和發佈建置?
    CMake 如何處理 GCC 專案中的調試和發佈建置?
    了解 CMake 中的調試與發布在 GCC 編譯專案中,CMake 為不同目標類型(調試/發布)配置建置設定提供了靈活性。以下是解決一些常見場景的方法:針對目標類型執行CMake要為偵錯和發布版本建立單獨的建置目錄,請按照下列步驟操作:mkdir Release cd Release cmake -...
    程式設計 發佈於2024-12-21
  • 我應該在 Python 腳本中使用 Shebang,如果是,使用哪一個?
    我應該在 Python 腳本中使用 Shebang,如果是,使用哪一個?
    我應該在 Python 腳本中包含 Shebang 嗎? 腳本中的 shebang 行允許直接從終端執行或透過檔案管理器,無需明確指定 python 命令。雖然它的包含是可選的,但通常被認為是一種方便的做法。 選擇正確的 Shebang 形式shebang 行的形式對於確保腳本可移植性至關重要。正確...
    程式設計 發佈於2024-12-21
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-21
  • 如何正確處理帶有空白邊界的 CSV 檔案?
    如何正確處理帶有空白邊界的 CSV 檔案?
    使用Scanner() 讀取CSV 問題使用Scanner() 讀取CSV 檔案時,通常會遇到文字包含空格的問題被移動到下一行。發生這種情況是因為 Scanner 遵循空格邊界。 Scanner() 用法中的 CSV 處理不正確提供的程式碼片段使用 Scanner() 讀取和處理 CSV 檔案。但是...
    程式設計 發佈於2024-12-21
  • 如何解決Hibernate中的LazyInitializationException?
    如何解決Hibernate中的LazyInitializationException?
    LazyInitializationException:無法從方法呼叫存取代理遇到「LazyInitializationException:無法初始化代理程式- 無會話」錯誤通常表示Hibernate 應用程式中的延遲載入問題。當您嘗試存取活動 Hibernate 會話範圍之外的延遲初始化的實體(例...
    程式設計 發佈於2024-12-21
  • 為什麼 Go 在套件中定義字串函數而不是方法?
    為什麼 Go 在套件中定義字串函數而不是方法?
    Go中基本類型的方法程式語言Go包含多種字串函數,例如ToUpper()和Split() 。與其他語言可能將這些函數定義為字串類型的方法不同,Go 將它們定義為 strings 套件的一部分。為什麼會這樣呢? 簡單性和靈活性根據Go 的創建者的說法,將方法保留在字符串等基本類型之外的主要原因之一是維...
    程式設計 發佈於2024-12-21
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-21
  • 將 Azure SQL 資料庫升級到 v12 後,為什麼會出現 TLS 握手錯誤?
    將 Azure SQL 資料庫升級到 v12 後,為什麼會出現 TLS 握手錯誤?
    v12 升級後Azure SQL 資料庫TLS 握手錯誤Azure SQL 資料庫實例升級到v12 後,您可能會遇到TLS 握手錯誤。當伺服器提供的憑證與用戶端連線字串中指定的主機名稱不符時,就會發生此錯誤。 錯誤詳細資料錯誤訊息通常表示憑證對於用戶端連線中使用的主機名稱以外的主機名稱有效。例如:T...
    程式設計 發佈於2024-12-21
  • 如何處理 SQL 資料庫中多個表的外鍵關係?
    如何處理 SQL 資料庫中多個表的外鍵關係?
    處理多個表的外鍵您有三個表:地區、國家和州。國家和國家可以屬於地區,形成等級結構。現在,您想要建立一個包含「region_id」和「popular_place_id」欄位的「popular_areas」表,並基於「popular_place_type」列在「popular_place_id」與國家或...
    程式設計 發佈於2024-12-21
  • Go 是否為 Goroutine 特定資料提供 ThreadLocal 等效項?
    Go 是否為 Goroutine 特定資料提供 ThreadLocal 等效項?
    了解Go 中的Goroutine-本地儲存在使用Go 時,開發者經常會遇到需要追蹤與特定Goroutine 相關的資訊的情況。在 Java 等其他語言中,ThreadLocal 為此任務提供了一個優雅的解決方案。 Go 是否提供類似的機制? Go 的 Goroutine 本地儲存方法Go 的標準庫不...
    程式設計 發佈於2024-12-21
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    程式設計 發佈於2024-12-21
  • 如何使用 Prototype.js 實作自動調整文字區域大小的功能?
    如何使用 Prototype.js 實作自動調整文字區域大小的功能?
    使用Prototype 實現自動調整大小的TextArea要增強內部銷售應用程式中的使用者體驗,請考慮向用於送貨地址的文字區域。以下是實現此目的的詳細指南:目標是創建一個可以動態調整其高度以適應文字輸入的文字區域,確保最佳的空間利用率和可讀性。為此,我們將利用 JavaScript 框架 Proto...
    程式設計 發佈於2024-12-21
  • Spring Boot如何配置多個資料來源?
    Spring Boot如何配置多個資料來源?
    在Spring Boot中配置多個資料來源在Spring Boot中,使用多個資料來源可以讓你隔離不同實體的資料存取管理或應用程式。為了實現這一點,使用了 application.properties 檔案和 Bean 配置方法。 application.properties若要新增第二個資料來源,...
    程式設計 發佈於2024-12-21
  • 為什麼 C++ 中的零長度陣列會導致錯誤 2233,如何修復它?
    為什麼 C++ 中的零長度陣列會導致錯誤 2233,如何修復它?
    在 C 中處理「零長度數組」 在 C 中,在遺留程式碼中可能會遇到「零長度數組」的情況。這涉及包含長度為零的陣列的結構。雖然警告被編譯指示抑制,但創建包含此類數組的新結構可能會導致錯誤 2233。為什麼會發生這種情況,可以採取什麼措施來解決它? 使用零長度數組的原因是一個歷史原因允許動態分配數組的...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3