这是我参与「第五届青训营 」伴学笔记创作活动的第15天
获取参数
获取queryString参数
GET请求,URL中?后面携带的参数
//https://cn.bing.com/search?q=hello
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/user/search", func(c *gin.Context) {
//获取浏览器发回的query String参数
//不是?username=,如?xxx=就默认返回第二项
name := c.DefaultQuery("username", "no name")
//获取参数
//username := c.Query("username")
//name,ok:=c.GetQuery("query") //取不到返回"",false
//if !ok{
// name ="NoName"}
address := c.Query("address")
//输出json结果给调用方
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": name,
"address": address,
})
})
r.Run()}
获取form参数
发送一个POST请求,通过form表单提交
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/login",func(c *gin.Context){
c.HTML(http.StatusOK,"login.html",nil)
})
//一次请求,对应一个响应
r.POST("/login", func(c *gin.Context) {
// DefaultPostForm取不到值时会返回指定的默认值
//username := c.DefaultPostForm("username", "小明")
username := c.PostForm("username")
password := c.PostForm("password")
//username, ok:=c.GetPostForm("username")
//if !ok{username="NO"}
//输出json结果给调用方
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"username": username,
"password": password,
})
})
r.Run(":8080")}
获取path(URL)路径参数
请求的参数通过URL路径传递,例如:/user/search/names/ages
r.GET("/:name/:age",func(c *gin.Context){
//获取路径参数
name:=c.Param("name")
age :=c.Param("age") //string类型
cJSON(http.StatusOK,gin.H){
"name":name,
"age":age,
}
})
参数绑定
将参数与结构体绑定 基于请求的Content-Type识别请求数据类型, 并利用反射机制自动提取请求中QueryString、form表单、JSON、XML等参数到结构体
.ShouldBind()函数能够基于请求自动提取JSON、form表单和QueryString类型的数据,并把值绑定到指定的结构体对象。
type UserInfo struct{
Username string `form:"username" json:"username" binding:"required"`
Password string `form:"password"`
}
//绑定query String
r.GET("/form",func (c *gin.Context) {//改成POST一样的写法
var u UserInfo
//通过反射查找结构体对应的
err:=c.ShouldBind(&u)
if err!=nil{
c.JSON(http.StatusBadRequest,gin.H{
"error":err.Error(),
})
}else{
fmt.Printf("%#v\n",u)
c.JSON(http.StatusOK,gin.H{
"status":"ok",
})
}
//绑定json核form表单只是把GET改为POST
})