HTTP 伺服器中的處理程序模式
使用 http.HandleFunc 時,會出現是否可以將通配符合併到模式中的問題。例如,您可能需要像「/groups//people」這樣的模式,其中星號 () 代表任何有效的 URL 段。
HTTP 處理程序模式限制
不幸的是,http.Handler 模式不是正規表示式或glob,因此不能直接使用通配符
用於模式靈活性的自訂處理程序
要克服此限制,請考慮建立一個利用正規表示式或其他所需模式的自訂HTTP 處理程序。以下是正規表示式的範例:
import ( "net/http" "regexp" ) type RegexpHandler struct { routes []*route } type route struct { pattern *regexp.Regexp handler http.Handler } // Register handlers with custom patterns 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)}) } // Process HTTP requests and route to appropriate handler based on custom patterns 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, return 404 http.NotFound(w, r) } func NewRegexpHandler() *RegexpHandler { return &RegexpHandler{routes: make([]*route, 0)} }
此處理程序可讓您註冊自訂模式和處理程序,從而提供以更動態的方式匹配 URL 的靈活性。它可以與預設的HTTP伺服器無縫整合:
http.Handle("/", NewRegexpHandler())
以上是您可以在「http.HandleFunc」模式中使用萬用字元嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!