【问题标题】:Retrieve optional query variables with gorilla mux?使用 gorilla mux 检索可选查询变量?
【发布时间】:2018-02-13 04:56:03
【问题描述】:

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

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

我假设 Gorilla mux 会给我:

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

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

【问题讨论】:

  • mux.Vars 用于路由中的命名参数。
  • 谢谢。是否有一些处理可选参数的规定?
  • r.URL.Query().Get("param1")?
  • 啊。当然。所以基本的答案是,这不是 mux 的用途;使用处理查询变量的标准方式。
  • @ScottDeerwester 可能会将此添加为答案?

标签: go gorilla


【解决方案1】:

正如评论中所反映的,基本答案是“这不是 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")

【讨论】:

    【解决方案2】:

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

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

    方法2.直接使用muxRouter对象提取值。

    // 处理请求的路由器,{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)
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-04
      • 2014-11-28
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2020-11-10
      • 2016-01-18
      • 2014-12-22
      相关资源
      最近更新 更多