使用http.HandleFunc 或http.Handler 註冊處理程序時,最好在URL 模式中指定通配符以符合多個路徑。例如,人們可能想要為 /groups/*/people 等所有請求定義一個處理程序。
不幸的是,Go 中 HTTP 處理程序的預設模式比對不支援通配符。模式不是正規表示式或通配符,也沒有內建方法來表示通配符路徑。
一種解決方案是產生使用正規表示式來匹配更複雜模式的自訂處理程序函數。以下是支援正規表示式的自訂處理程序的範例:
import ( "net/http" "regexp" ) type RegexpHandler struct { routes []*route } type route struct { pattern *regexp.Regexp handler http.Handler } func (h *RegexpHandler) Handler(pattern *regexp.Regexp, handler http.Handler) { h.routes = append(h.routes, &route{pattern, handler}) } func (h *RegexpHandler) HandleFunc(pattern *regexp.Regexp, handler func(http.ResponseWriter, *http.Request)) { h.routes = append(h.routes, &route{pattern, http.HandlerFunc(handler)}) } func (h *RegexpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { for _, route := range h.routes { if route.pattern.MatchString(r.URL.Path) { route.handler.ServeHTTP(w, r) return } } // no pattern matched; send 404 response http.NotFound(w, r) }
此自訂處理程序可讓您定義正規表示式模式並將其與處理程序函數關聯。當請求傳入時,處理程序會根據其模式檢查請求路徑,如果找到匹配,則分派到關聯的處理程序。
雖然這種方法提供了更大的靈活性,但它需要額外的開發工作並引入對正規表示式。儘管如此,它是與 http.HandleFunc 進行複雜 URL 模式匹配的可行選項。
以上是如何在 Go 的 HTTP 處理程序中實作 URL 模式的通配符匹配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!