我应该如何根据 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
将被静默忽略。
这是我在 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
将被静默忽略。