gpt4 book ai didi

regex - 如何在 golang 中使用正则表达式获取 url 模式?

转载 作者:IT王子 更新时间:2023-10-29 01:50:20 28 4
gpt4 key购买 nike

如何使用正则表达式匹配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/

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