如何使用正则表达式匹配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程序以将数据插入数据库中。 有什么建议?