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

前端之家收集整理的这篇文章主要介绍了golang mux,路由通配符和自定义功能匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 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变量,但仍然匹配.

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

猜你在找的Go相关文章