只有username和password两个字段的表单数据进行提交时,可以使用context.PostForm和context.GetPostForm获取。但是如果表单数据较多时,使用PostForm和GetPostForm一次获取一个表单数据,开发效率较慢。
Gin框架提供给开发者表单实体绑定的功能,可以将表单数据与结构体绑定。
Shouldxxx和bindxxx区别就是bindxxx会在head中添加400的返回信息,而Shouldxxx不会

1 gin参数绑定的方式

gin提供了灵活的bind解析参数的方法供你选择

  • 解析错误会在header中写一个400的状态码 ```go //内部根据Content-Type去解析 c.Bind(obj interface{})

//内部替你传递了一个binding.JSON对象去解析 c.BindJSON(obj interface{})

//解析哪一种绑定的类型,根据你的选择 c.BindWith(obj interface{}, b binding.Binding)

  1. - 解析错误直接返回,需要自定义返回状态码
  2. ```go
  3. //内部根据Content-Type去解析
  4. c.ShouldBind(obj interface{})
  5. //内部替你传递了一个binding.JSON对象去解析
  6. c.ShouldBindJSON(obj interface{})
  7. //解析哪一种绑定的类型,根据你的选择
  8. c.ShouldBindWith(obj interface{}, b binding.Binding)

2 context.Bind()

一般来说用Bind()即可

  • 如果是GET请求, 只绑定 查询参数
  • 如果是POST请求, 先检查content-type是否是json, 不是才绑定form ```go package main

import ( “fmt” “github.com/gin-gonic/gin” “log” )

func main() { engine := gin.Default() engine.GET(“/hello”, func(context *gin.Context) { var person Person if err := context.Bind(&person); err != nil { log.Fatal(err.Error()) return } fmt.Printf(“%v”, person)

  1. context.Writer.Write([]byte("Hello," + person.Name))
  2. })
  3. engine.Run("0.0.0.0:5000")

}

type Person struct { Name string form:"name" // 若不写json等tag, 则默认与form相同 Sex string form:"sex" Age int form:"age" } ```