我应该如何根据 URL 切换

How should I switch based on the URL

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

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

在我的数据库中有姓名、性别和年龄,我应该如何根据下面的代码片段编写 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"})
        }
    }

您可以使用 URL to see the results you can 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
    }

}

使用以下代码:

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 将被静默忽略。