【问题标题】:How to use multiple parameters in query router如何在查询路由器中使用多个参数
【发布时间】:2019-03-13 12:40:48
【问题描述】:

大家! 问题是: 如何在查询路由器中写入多个参数,所以我可以像这样编写一个、两个或多个参数:

  /applications/filter/?date=today
  /applications/filter/?status=true
  /applications/filter/?date=today&status=true

我试过这个,但它不适用于单个参数,仅适用于两个:

router.HandleFunc("/applications/filter/", authMiddle.RequiresLogin(authContrl.FilterDateStatus())).
        Queries("date", "{date}", "status", "{status}").Methods("GET")

【问题讨论】:

  • documentation 声明:“路由中定义的所有变量都是必需的,并且它们的值必须符合相应的模式。”因此,您可能必须多次注册路由以匹配每种情况。

标签: go filter routes gorilla


【解决方案1】:

一开始这有点混乱,但你的路线在这里总是一样的:

  /applications/filter/?date=today
  /applications/filter/?status=true
  /applications/filter/?date=today&status=true

总是/applications/filter/

在这种情况下,您只需要在此处映射一条路线。句柄函数接收request。在请求中你可以parse the url

https://play.golang.org/p/op49nTJSlCP

综合起来可能是这样的:

router.HandleFunc("/applications/filter/",func(w http.ResponseWriter,r *http.Request){
    // in production you should handle the errors!
    // I am just skipping this to keep the example simple
    u, _ := url.Parse(r.URL)
    v := u.Query()
    if _,ok := v[date]; ok {
        // do something with dae
    }
})

【讨论】:

  • 这对我不起作用:不能在 url.Parse 的参数中使用 r.URL (type *url.URL) 作为类型字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2014-10-22
相关资源
最近更新 更多