Dac*_*d3r 4 regex go mux gorilla
我将Golang Gorilla Toolkit中的Mux包用于我的路线。
考虑以下路线:
m.HandleFunc("/admin/install", installHandler).Methods("GET")
m.HandleFunc("/admin/^((?!install).)*$", adminHandler).Methods("GET")
m.HandleFunc("/admin", adminHandler).Methods("GET")
Run Code Online (Sandbox Code Playgroud)
问题出在中间路线的正则表达式上-无法解释,因此该路线将无法工作!
m.HandleFunc("/admin/{^((?!install).)*$}", adminHandler).Methods("GET")
Run Code Online (Sandbox Code Playgroud)
大括号{}也不起作用。它只是被忽略,并被视为/ admin /
都没有:
m.HandleFunc("/admin/{_dummy:^((?!install).)*$}", adminHandler).Methods("GET")
Run Code Online (Sandbox Code Playgroud)
简而言之,我要在这里实现的是首先匹配/ admin / install路由,然后使用正则表达式将该确切的路由从下面的路由中排除,但这是行不通的。
有没有办法在大猩猩mux包中使用正则表达式?
实际上可以这样做:
m.HandleFunc(`/{_dummy:admin\/([^install]*).*}`, adminHandler).Methods("GET")
Run Code Online (Sandbox Code Playgroud)
编辑:
作为我对VonC上面评论的回答,这里有一个示例go应用程序:https : //play.golang.org/p/nYWNADK7Sr
在本地PC上运行它。尝试以下路线:
http://localhost:8080/admin/ - (returns "adminHandler")
http://localhost:8080/admin/something - (returns "adminHandler")
http://localhost:8080/admin/install - (returns "installHandler")
Run Code Online (Sandbox Code Playgroud)
是的,VonC确实解决了特定问题:
“首先匹配/ admin / install路由,然后再将该路由排除在下面的路由之外”
但这是正确的,它并不意味着“不跟在后面,安装”一词 -这只是在re2语法范围内可能的另一种方法。如果碰巧出现在url中,则简单地“忽略”或排除安装一词。