我正在使用
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变量,但仍然匹配.
我不太明白你的第二个问题.