Go 如何在查询路由器中使用多个参数

Go 如何在查询路由器中使用多个参数,go,filter,routes,gorilla,Go,Filter,Routes,Gorilla,大家好! 问题是: 如何在查询路由器中写入多个参数,以便我可以像这样写入一个、两个或多个参数: /applications/filter/?date=today /applications/filter/?status=true /applications/filter/?date=today&status=true 我尝试了这个方法,但它不适用于单个参数,仅适用于两个参数: router.HandleFunc("/applications/filter/", authMi

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

  /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")

这在开始时有点让人困惑,但您的路线在这里总是一样的:

  /applications/filter/?date=today
  /applications/filter/?status=true
  /applications/filter/?date=today&status=true
它总是
/applications/filter/

在这种情况下,你只需要在这里绘制一条路线。handle func接收。在请求内部,您可以

总而言之,它可能看起来像:

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)作为类型字符串