組合多個http.ServeMux 實例
要在同一網路位址和連接埠上提供多個http.ServeMux 實例,combinedMux 函數可以是實作如下:
<code class="go">func combineMux(muxes ...*http.ServeMux) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var h http.Handler for _, mux := range muxes { if h = mux.Handler(r); h != nil { h.ServeHTTP(w, r) return } } http.NotFound(w, r) }) }</code>
此函數建立一個新的http.Handler,它迭代提供的ServeMux 實例並為給定請求提供第一個符合的處理程序。如果沒有找到,則傳回 404 Not Found 回應。
替代方法:嵌套 ServeMux 實例
實現相同結果的另一種方法是嵌套 ServeMux彼此內部的實例。這是可能的,因為 http.ServeMux 實作了 http.Handler 介面。
例如,使用此方法在同一連接埠和主機上提供muxA 和muxB:
<code class="go">rootMux := http.NewServeMux() rootMux.Handle("/muxa/", muxA) rootMux.Handle("/muxb/", muxB) http.ListenAndServe(":8080", rootMux)</code>
在此在這種情況下,rootMux 將處理對其根URL 的所有請求,並將對/muxa/ 和/muxb/ 的請求委託給對應的ServeMux 實例。請注意,每個嵌套的 ServeMux 都需要處理自己的子路徑前綴(例如,/muxa/ 表示 muxA)。
以上是如何在同一連接埠上組合多個 http.ServeMux 實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!