gpt4 book ai didi

regex - http.HandleFunc 模式中的通配符

转载 作者:IT老高 更新时间:2023-10-28 12:58:07 29 4
gpt4 key购买 nike

在 Go(语言)中注册处理程序时,有没有办法在模式中指定通配符?

例如:

http.HandleFunc("/groups/*/people", peopleInGroupHandler)

* 可以是任何有效的 URL 字符串。或者是匹配 /groups 并从处理程序 (peopleInGroupHandler) func 中找出其余部分的唯一解决方案?

最佳答案

http.Handler 和 http.HandleFunc 的模式不是正则表达式或 glob。没有办法指定通配符。他们记录在案here .

也就是说,创建自己的处理程序并不难,它可以使用正则表达式或您想要的任何其他类型的模式。这是一个使用正则表达式(已编译,但未经测试):

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

关于regex - http.HandleFunc 模式中的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6564558/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com