如何使用正则表达式匹配URL,决定使用相应的函数处理
package main
import(
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/pattern", resolve)
http.ListenAndServe(":8080", nil)
}
func resolve(w http.ResponseWriter, r * http.Request) {
fmt.Println(r.URL.Host)
}
最佳答案
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 这样的外部库。
关于regex - 如何在 golang 中使用正则表达式获取 url 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474313/