使用大猩猩 mux 检索可选的查询变量?
Retrieve optional query variables with gorilla mux?
我正在编写一个可以接受 POST 或 GET 的处理程序。因此,我想要能够说的选项:
http://host/query?parm1=value&parm2=value
我假设 Gorilla mux 会给我:
{
"parm1": "value",
"parm2": "value
}
但是 mux.Vars(r)
是空的。我知道使用 .Query("key", "value"
会使参数成为强制参数,这不是我想要的。我错过了什么?
正如评论中所反映的那样,基本答案是 "that's not what mux is for"。 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")
如果您有如下所示的处理程序函数,那么您可以使用两种方法中的任何一种来提取查询字符串值(此处为 {param1})。
方法 1. 它遍历查询字符串并打印键和值。
方法2.直接使用mux Router对象提取值。
// 处理请求的Rounter,传入{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)
}
我正在编写一个可以接受 POST 或 GET 的处理程序。因此,我想要能够说的选项:
http://host/query?parm1=value&parm2=value
我假设 Gorilla mux 会给我:
{
"parm1": "value",
"parm2": "value
}
但是 mux.Vars(r)
是空的。我知道使用 .Query("key", "value"
会使参数成为强制参数,这不是我想要的。我错过了什么?
正如评论中所反映的那样,基本答案是 "that's not what mux is for"。 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")
如果您有如下所示的处理程序函数,那么您可以使用两种方法中的任何一种来提取查询字符串值(此处为 {param1})。
方法 1. 它遍历查询字符串并打印键和值。
方法2.直接使用mux Router对象提取值。
// 处理请求的Rounter,传入{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)
}