首页  >  文章  >  后端开发  >  如何匹配 HTTP 处理程序的 URL 模式中的通配符?

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

Barbara Streisand
Barbara Streisand原创
2024-11-12 19:38:02331浏览

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