【问题标题】:How should I switch based on the URL我应该如何根据 URL 切换
【发布时间】:2020-08-10 12:03:34
【问题描述】:

这是我在 Postman 中的 URL:http://localhost:8000/filter?Name=Srinu

我正在传递一个查询字符串以根据查询获取数据库中的记录。

在我的具有姓名、性别和年龄的数据库中,我应该如何根据下面的代码 sn-p 编写 switch 语句,我必须根据我的查询获取数据?

switch ? {
    case "Name":
        fiName := bson.D{{"Name", name}}
        err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiName).All(&json1)

        if err == nil {
            c.Writer.Header().Set("Content-Type", "application/json")
            c.JSON(201, &json1)
        } else {
            c.JSON(500, gin.H{"result": "An error occured"})
        }
    case "Gender":
        fiGender := bson.D{{"Gender", gender}}
        err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiGender).All(&json1)

        if err == nil {
            c.Writer.Header().Set("Content-Type", "application/json")
            c.JSON(201, &json1)
        } else {
            c.JSON(500, gin.H{"result": "An error occured"})
        }
    case "Age":
        fiAge := bson.D{{"Age", age}}
        err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiAge).All(&json1)

        if err == nil {
            c.Writer.Header().Set("Content-Type", "application/json")
            c.JSON(201, &json1)
        } else {
            c.JSON(500, gin.H{"result": "An error occured"})
        }
    }

【问题讨论】:

    标签: go go-gin


    【解决方案1】:

    使用以下代码:

    r := ctx.Request
    
    r.ParseForm()
    switch {
    case len(r.Form["Name"]) > 0:
        name := r.Form["Name"][0]
        fiName := bson.D{{"Name", name}}
        err = uc.session.DB(DB_NAME).C(DB_COLLECTION).Find(fiName).All(&json1)
        ...
    }
    

    调用r.ParseForm() 使用从请求中解析的数据设置r.Form

    r.Form 字段是字符串切片的映射。如果查询中存在参数,则该参数的字符串切片的长度大于零。

    语句name := r.Form["Name"][0] 获取Name 的第一个参数值。如果请求是http://localhost:8000/filter?Name=Srinu&Name=Reflect,那么第二个值Reflect 会被忽略。

    【讨论】:

      【解决方案2】:

      你可以使用URL查看结果你可以check

      package main
      
      import (
          "fmt"
          "net/url"
      )
      
      func main() {
          u, err := url.Parse("http://localhost:8000/filter?Name=Srinu")
          if err != nil {
              fmt.Println(err)
          }
      
          query :=u.RawQuery
          parsed, err := url.ParseQuery(query)
      
          if err != nil {
              fmt.Println(err)
          }
      
          switch true {
                  case parsed.Get("Name") != "" :
                  fmt.Println(parsed["Name"]) 
                  case parsed.Get("Age") != "":
                  fmt.Println(parsed["Age"])  
              default:
                  return
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        • 2022-08-03
        • 1970-01-01
        • 1970-01-01
        • 2016-08-10
        • 2010-09-05
        • 2011-07-01
        相关资源
        最近更新 更多