我正在使用来自 Golang Gorilla Toolkit 的 Mux 包对于我的路线。
考虑以下路线:
m.HandleFunc("/admin/install", installHandler).Methods("GET")
m.HandleFunc("/admin/^((?!install).)*$", adminHandler).Methods("GET")
m.HandleFunc("/admin", adminHandler).Methods("GET")
问题出在中间路由的正则表达式上——它没有被解释,所以路由不会工作!
m.HandleFunc("/admin/{^((?!install).)*$}", adminHandler).Methods("GET")
使用 {} 大括号也不起作用。它只是被忽略,并被视为/admin/
也没有:
m.HandleFunc("/admin/{_dummy:^((?!install).)*$}", adminHandler).Methods("GET")
简而言之,我在这里试图实现的是首先匹配/admin/install 路由,然后我想使用正则表达式从下面的路由中排除那个确切的路由,但它不起作用。
有什么方法可以在 gorilla mux 包中使用正则表达式吗?
最佳答案
实际上可以这样做:
m.HandleFunc(`/{_dummy:admin\/([^install]*).*}`, adminHandler).Methods("GET")
编辑:
作为我对 VonC 上面评论的回答,这里有一个示例 go 应用程序:https://play.golang.org/p/nYWNADK7Sr
在您的本地电脑上运行它。尝试以下路线:
http://localhost:8080/admin/ - (returns "adminHandler")
http://localhost:8080/admin/something - (returns "adminHandler")
http://localhost:8080/admin/install - (returns "installHandler")
是的,VonC 确实解决了特定问题:
"to first match the /admin/install route, and that exact route I then want to exclude from the route below"
但是它并不意味着 “后面没有安装这个词” 是正确的 - 这只是在 re2 语法范围内可能的替代方法。简单地“忽略”或排除单词 install,如果它恰好出现在 url 中。
关于regex - gorilla Mux 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28950606/