首頁  >  文章  >  後端開發  >  如何匹配 HTTP 處理程序的 URL 模式中的通配符?

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

Barbara Streisand
Barbara Streisand原創
2024-11-12 19:38:02321瀏覽

How Can I Match Wildcards in URL Patterns for HTTP Handlers?

在HTTP 處理程序的模式中指定通配符

使用http.Handler 或http.HandleFunc 建立處理程序時,您可能需要在以下位置指定通配符符合一系列URL 的模式。不幸的是,這些函數的模式不是正規表示式,預設不支援通配符。

相反,您可以建立自己的自訂處理程序,該處理程序支援使用正規表示式或任何其他所需模式進行模式比對。以下是使用正規表示式的範例:

import (
    "net/http"
    "regexp"
)

type route struct {
    pattern *regexp.Regexp
    handler http.Handler
}

type RegexpHandler struct {
    routes []*route
}

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)
}

透過實作自己的自訂處理程序,您可以靈活地定義自己的模式匹配邏輯並根據需要處理不同類型的 URL。

以上是如何匹配 HTTP 處理程序的 URL 模式中的通配符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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