加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang mux,路由通配符和自定义功能匹配

发布时间:2020-12-16 19:28:55 所属栏目:大数据 来源:网络整理
导读:我正在使用 mux软件包似乎工作得很好,除了它似乎不支持复杂的路由或至少我不知道它是如何做的. 我有以下几条路线: router := mux.NewRouter()router.HandleFunc("/{productid}/{code}",product)router.HandleFunc("/{user}",userHome)router.HandleFunc("/s
我正在使用 mux软件包似乎工作得很好,除了它似乎不支持复杂的路由或至少我不知道它是如何做的.
我有以下几条路线:
router := mux.NewRouter()
router.HandleFunc("/{productid}/{code}",product)
router.HandleFunc("/{user}",userHome)
router.HandleFunc("/search/price",searchPage)

所以我有两个问题:

>如何定义/ search / price / *这样的通配符路由,以便/ search / price / 29923 / rage / 200 / color = red等请求可以匹配?
>是否可以向现有路线添加自定义条件?例如如果路由是/ {productid} / {code}并且函数x返回true,则使用此handlerTrue,如果它返回false,则使用handlerFalse.

我试图添加像.MatcherFunc(myfunction(ip)bool)之类的东西到路线,但它抱怨路由器没有这样的方法.

目前我正处理处理程序内的“自定义”条件.

你可以使用regexp.就像是
router.HandleFunc(`/search/price/{rest:[a-zA-Z0-9=-/]+}`,searchPage)

这样,休息将捕获所有内容,所以在你的例子中,休息将是29923 / rage / 200 / color = red.您需要在代码中解析它.

不过,你可能想要一些像可选参数.

router.HandleFunc(`/search{price:(/price/[0-9]+)?}{rage:(/rage/[0-9]+)?}{color:(/color=[a-z]+)?}`,searchPage)

在那之后,你得到vars price =“/ price / 29923”,rage =“/ rage / 200”和color =“/ color = red”,你仍然需要解析,但它更容易,你可以控制哪个参数有效.如果你跳过一些参数,它会按预期工作,例如. / search / price / 29923 / color = red只会给出一个空的rage变量,但仍然匹配.

我不太明白你的第二个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读