只有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)
- 解析错误直接返回,需要自定义返回状态码
```go
//内部根据Content-Type去解析
c.ShouldBind(obj interface{})
//内部替你传递了一个binding.JSON对象去解析
c.ShouldBindJSON(obj interface{})
//解析哪一种绑定的类型,根据你的选择
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)
context.Writer.Write([]byte("Hello," + person.Name))
})
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"
}
```