http.HandleFunc模式中的通配符

在Go(语言)中注册处理程序时,是否可以在模式中指定通配符?

例如:

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

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

回答:

http.Handler和http.HandleFunc的模式不是正则表达式或glob。无法指定通配符。它们记录在这里。

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

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)

}

以上是 http.HandleFunc模式中的通配符 的全部内容, 来源链接: utcz.com/qa/401902.html

回到顶部