首頁 >後端開發 >Golang >如何在同一連接埠上組合多個 http.ServeMux 實例?

如何在同一連接埠上組合多個 http.ServeMux 實例?

Linda Hamilton
Linda Hamilton原創
2024-11-02 10:18:02809瀏覽

How to Combine Multiple http.ServeMux Instances on the Same Port?

組合多個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中文網其他相關文章!

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