1.json的数据自动解析和绑定
// 定义接收数据的结构体
type Test struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
Name string `json:"name" binding:"required"`
Password string `json:"password" binding:"required"`
}
func main() {
// 1.创建路由
r := gin.Default()
// JSON绑定
r.POST("testJson", func(c *gin.Context) {
// 声明接收的变量
var json Test
// 将request的body中的数据,自动按照json格式解析到结构体
if err := c.ShouldBindJSON(&json); err != nil {
// 返回错误信息
println(err)
// gin.H封装了生成json数据的工具
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
fmt.Printf("name:%v \n",json.Name)
fmt.Printf("password:%v \n",json.Password)
c.JSON(http.StatusOK, gin.H{"status": "200"})
})
r.Run(":8080")
}

2.表单数据解析和绑定
// 定义接收数据的结构体
type Test struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
Name string `form:"name" binding:"required"`
Password string `form:"password" binding:"required"`
}
func main() {
// 1.创建路由
r := gin.Default()
// JSON绑定
r.POST("testForm", func(c *gin.Context) {
// 声明接收的变量
var form Test
// Bind()默认解析并绑定form格式
// 根据请求头中content-type自动推断
if err := c.Bind(&form); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
fmt.Printf("name:%v \n",form.Name)
fmt.Printf("password:%v \n",form.Password)
c.JSON(http.StatusOK, gin.H{"status": "200"})
})
r.Run(":8080")
}

3. URI数据解析和绑定
// 定义接收数据的结构体
type Test struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
Name string `uri:"name" binding:"required"`
Password string `uri:"password" binding:"required"`
}
func main() {
// 1.创建路由
r := gin.Default()
// JSON绑定
r.POST("testUri", func(c *gin.Context) {
// 声明接收的变量
var uri Test
// 根据请求头中content-type自动推断
if err := c.Bind(&uri); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
fmt.Printf("name:%v \n",uri.Name)
fmt.Printf("password:%v \n",uri.Password)
c.JSON(http.StatusOK, gin.H{"status": "200"})
})
r.Run(":8080")
}
