当前位置: 首页 > 面试题库 >

如何在Golang中使用regexp get url模式?

江恩
2023-03-14
问题内容

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



 类似资料:
  • 问题内容: 它在下面被称为 我的理解是,我们首先锁定接收器s(这是Stat类型),然后如果计数器确实存在,则将其添加。 问题: Q1:为什么我们需要锁定它?甚至是什么意思? 问题2:-这是否会锁定整个接收器或仅锁定Stat类型的counters字段? 问题3:-这是否会锁定平均值字段? 问题4:为什么要使用?我以为通道是处理Golang中并发的首选方法? 问题5:这是什么。为什么在这种情况下我们需

  • 遍历文件夹,包括子目录 以下是简化的代码: 报错: undefined: walkFn 我不清楚如何定义一个正确的walkFn, 请问应该如何修改呢? 谢谢

  • 问题内容: Go对于此SQL查询中的第二个参数想要什么。我正在尝试在postgres中使用查找。 我真正想要的是: 问题答案: 查询只是使用varargs来替换sql中的参数,因此,在您的示例中,您只需要执行 例如,这个和第二个示例的内容是动态的,那么您将 如果“ IN”部分具有可变的args,则可以执行(播放)

  • 问题内容: 我尝试了很多方法,例如 和 而且转义序列也不起作用 问题答案: 所有你需要的是 :

  • 问题内容: 我正在尝试使用Go解析YAML文件。问题在于YAML文件中的密钥可能并不总是相同。这是为了进行API版本控制,以便用户可以定义他们支持的版本。例如V1,V2,V3等。它们不需要按顺序排列,并且可以省略它们不支持的版本,例如V0,V2,V5等。 这是最高层,我还没有从结构内部弄清楚如何做到这一点。 问题答案: 首先,您尝试将根解析为,但其实际类型为。其次,如果要保留该类型结构,则需要一个

  • 问题内容: 嗨,我正在尝试执行脚本以使用Golang将数据填充到数据库中 问题是我遇到了错误: 我认为问题是执行人员认为是dbname的最后一个参数(sql脚本路径) 终端中的以下命令正在运行: 但我尝试在Go中复制以自动执行脚本。 该脚本具有删除表,创建表,插入和具有FK关系的PK,这是一个非常完整的脚本,因此我无法逐行执行,因此我决定执行de mysql程序以将数据插入数据库中。 有什么建议?