首頁 > 後端開發 > Golang > 主體

如何在 Go 的 HTTP 處理程序中實作 URL 模式的通配符匹配?

Patricia Arquette
發布: 2024-11-12 19:24:02
原創
820 人瀏覽過

How can I implement wildcard matching for URL patterns in Go's HTTP handlers?

HTTP 處理程序的URL 模式中的通配符

使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板