使用gorilla mux检索可选的查询变量?

时间:2017-09-05 01:20:25

标签: go gorilla

我正在编写一个可以接受POST或GET的处理程序。因此,我希望能够说:

http://host/query?parm1=value&parm2=value

我假设Gorilla mux会给我:

{
    "parm1": "value",
    "parm2": "value
}

mux.Vars(r)为空。我知道使用.Query("key", "value"会使参数成为必需参数,这不是我想要的。我错过了什么?

2 个答案:

答案 0 :(得分:4)

从评论中可以看出,基本答案是“这不是mux的目的”。 mux擅长分离URL的 path 部分,并将这些组件转换为变量。举一个假设的例子,一个提供有关一个国家的信息的呼叫可能具有如下所示的规范:

country/{code}

并接受如下所示的呼叫:

http://myhost/country/DE

您将获得code参数的值,如下所示:

code := mux.Vars(r)["code"]

如果要传递查询变量,则不要使用mux进行。只需从请求中直接获取它们即可。因此,给出了替代查询语法:

http://myhost/country?code=DE

你会做的:

code := r.URL.Query().Get("code")

答案 1 :(得分:0)

如果你有一个像下面这样的 Handler 函数,那么你可以使用这两种方法中的任何一种来提取查询字符串值(这里是它的 {param1})。

方法 1. 它遍历查询字符串并打印键和值。

方法二,直接使用mux Router对象提取值。

// 用于处理请求的路由器,查询字符串传入 {param1} 变量

router.HandleFunc("/viewdemo/{param1}", GetDemoDetail).Methods("GET")


func GetData(response http.ResponseWriter, request *http.Request) {
// iterate throguth the object and extract key and value
    for k, v := range mux.Vars(request) {
        fmt.Printf("key=%v, value=%v", k, v)
    }

//Use the mux router to extract the value of query string {param1}
    params := mux.Vars(request)
    objid := params["param1"]
    fmt.Println("Query string key value", objid)
}