我正在使用mux http://www.gorillatoolkit.org/pkg/mux包似乎工作得很好,除了它似乎不支持复杂的路线,或者至少我不明白它是如何工作的。
我有以下几条路线:
router := mux.NewRouter()
router.HandleFunc("/{productid}/{code}", product)
router.HandleFunc("/{user}", userHome)
router.HandleFunc("/search/price", searchPage)
所以我有两个问题:
我尝试添加类似的东西.MatcherFunc(myfunction(ip)bool)
到路由,但它抱怨路由器没有这样的方法。
目前我正在处理程序内处理“自定义”条件。
您可以使用正则表达式。就像是
router.HandleFunc(`/search/price/{rest:[a-zA-Z0-9=\-\/]+}`, searchPage)
那样,rest
只会捕获一切,所以在你的例子中rest
将会29923/rage/200/color=red
。您需要在代码中解析它。
不过,您可能需要一些类似的可选参数。
router.HandleFunc(`/search{price:(\/price\/[0-9]+)?}{rage:(\/rage\/[0-9]+)?}{color:(\/color=[a-z]+)?}`, searchPage)
之后,你会得到 varsprice = "/price/29923"
, rage = "/rage/200"
and color = "/color=red"
,您仍然需要解析,但它更容易,并且您可以控制哪些参数有效。如果您跳过某些参数,它会按预期工作,例如。/search/price/29923/color=red
只会给出一个空的rage
变量,但仍然匹配。
我不太明白你的第二个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)