gpt4 book ai didi

golang mux,路由通配符和自定义函数匹配

转载 作者:IT王子 更新时间:2023-10-29 01:18:22 26 4
gpt4 key购买 nike

我正在使用 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) 的东西,但它提示路由器没有这样的方法。

目前我正在处理程序中处理“自定义”条件。

最佳答案

您可以使用正则表达式。有点像

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)

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

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

关于golang mux,路由通配符和自定义函数匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21664489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com