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

标签 regex http go url-routing

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

相关文章:

python - 如何修复错误 "AttributeError: ' 模块的对象在 python3 中没有属性 'client'?

go - 如何向 Go Present 中的小节添加文本?

Go range over channel 死锁问题,我应该关闭 channel 吗?

go - gRPC 设置有问题。获取间歇性 RPC 不可用错误

子组上的 Java 正则表达式

javascript - 匹配符号的正则表达式以符号开头

http - 电话/浏览器是否会缓存 HTTP HEAD 请求

java - HTTPS - Web 请求和响应是否已加密?

Python正则表达式替换

Javascript 或 JQuery 字符串获取具有特定前缀的子字符串