http.HandleFunc()不能用于注册模式以匹配正则表达式。简而言之,在处指定的模式
HandleFunc()可以匹配固定的,有根的路径(如
/favico.ico)或有根的子树(如
/images/),较长的模式优先于较短的模式。您可以在该
ServeMux类型的文档中找到更多详细信息。
您可以做的是将您的处理程序注册到一个有根的子树,该子树可能包含该
/模式的所有内容,并且在您的处理程序内部,您可以进行进一步的正则表达式匹配和路由。
例如:
func main() { http.HandleFunc("/", route) // Match everything http.ListenAndServe(":8080", nil)}var rNum = regexp.MustCompile(`d`) // Has digit(s)var rAbc = regexp.MustCompile(`abc`) // Contains "abc"func route(w http.ResponseWriter, r *http.Request) { switch { case rNum.MatchString(r.URL.Path): digits(w, r) case rAbc.MatchString(r.URL.Path): abc(w, r) default: w.Write([]byte("Unknown Pattern")) }}func digits(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Has digits"))}func abc(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Has abc"))}
或使用外部库(例如Gorilla MUX)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)