关于ZAKER 融媒体解决方案 合作 加入

大猩猩 Mux Regex

CocoaChina 11-16

我正在使用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 app: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 中 .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 app简而言之

觉得文章不错,微信扫描分享好友

扫码分享