鑑於您需要在同一連接埠號碼上提供兩個http.ServeMux 實例,有多種方法可以實現此目的。
由於 http.ServeMux 實現了 http.Handler 接口,因此它可以嵌套在另一個多路復用器中。一個範例是使用 StripPrefix() 函數建立一個處理程序,該處理程序從請求 URL 中移除前綴並將其傳遞給巢狀多工器。
<code class="go">rootMux := http.NewServeMux() subMux := http.NewServeMux() // Handle requests to /top_path/sub_path subMux.HandleFunc("/sub_path", myHandleFunc) // Strip the /top_path prefix from the URL before passing it to subMux rootMux.Handle("/top_path/", http.StripPrefix("/top_path", subMux)) http.ListenAndServe(":8000", rootMux)</code>
另一種方法是建立一個組合兩個多工器的自訂處理程序。
<code class="go">import ( "net/http" ) // CombinedMux combines multiple http.ServeMux instances. type CombinedMux struct { muxes []http.Handler } // ServeHTTP implements the http.Handler interface for CombinedMux. func (c *CombinedMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { for _, mux := range c.muxes { mux.ServeHTTP(w, r) } } func main() { muxA, muxB := http.NewServeMux(), http.NewServeMux() // Initialize muxA and muxB combinedMux := &CombinedMux{ muxes: []http.Handler{muxA, muxB}, } http.ListenAndServe(":8080", combinedMux) }</code>
在這個方法中,CombinedMux 處理程序會迭代多重使用器列表,並將服務邏輯依序委託給每個多工器。請注意,與巢狀多工器方法不同,此方法可能會導致為每個請求呼叫多個處理程序。
兩種方法都提供了組合多個 http.ServeMux 實例並在同一連接埠號碼上為它們提供服務的方法。選擇最適合您要求的方法。
以上是如何在 Go 中組合多個 HTTP 多工器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!