Gin 参数绑定
1. 什么是参数绑定
Gin 参数绑定是指将请求中的数据与结构体进行绑定,Gin 支持的参数绑定有 Query、Form、JSON、XML、ProtoBuf 等。
2. Query 参数绑定
Query 参数由查询字符串中的键值对组成,例如:/user?name=张三&age=18,Gin 可以将 Query 参数与结构体进行绑定。
package main
import "github.com/gin-gonic/gin"
type User struct {
Name string `form:"name"`
Age int `form:"age"`
}
func main() {
r := gin.Default()
// Query 参数绑定
r.GET("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBindQuery(&user); err != nil {
c.String(200, err.Error())
return
}
c.String(200, "%#v", user)
})
r.Run() // listen and serve on
}
3. Form 参数绑定
Form 参数由表单中的键值对组成,例如:<form action="/user" method="post"><input type="text" name="name" /><input type="text" name="age" /></form>,Gin 可以将 Form 参数与结构体进行绑定。
package main
import "github.com/gin-gonic/gin"
type User struct {
Name string `form:"name"`
Age int `form:"age"`
}
func main() {
r := gin.Default()
// Form 参数绑定
r.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBind(&user); err != nil {
c.String(200, err.Error())
return
}
c.String(200, "%#v", user)
})
r.Run() // listen and serve on
}
4. JSON 参数绑定
JSON 是一种轻量级的数据交换格式,它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON 在数据交换方面有着明显的优势,它是一种理想的数据交换格式。
POST 请求中的数据可以是 JSON 格式的,Gin 可以将 JSON 数据与结构体进行绑定。
package main
import "github.com/gin-gonic/gin"
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
r := gin.Default()
// JSON 参数绑定
r.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.String(200, err.Error())
return
}
c.String(200, "%#v", user)
})
r.Run() // listen and serve on
}
Gin 数据校验
1. 什么是数据校验
数据校验是指对请求中的数据进行校验,例如:校验用户名是否为空、校验密码是否符合规则等。
2. 基本使用
package main
import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"net/http"
)
type User struct {
Name string `form:"name" binding:"required"`
Age int `form:"age" binding:"required,gt=18"`
}
func main() {
r := gin.Default()
// 数据校验
r.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBindWith(&user, binding.Form); err != nil {
c.String(http.StatusBadRequest, err.Error())
return
}
c.String(http.StatusOK, "%#v", user)
})
r.Run() // listen and serve on
}
Gin 错误处理
1. 什么是错误处理
错误处理是指对请求中的错误进行处理,例如:请求中的数据校验失败、请求中的数据绑定失败等。
2. 基本使用
package main
import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"net/http"
)
type User struct {
Name string `form:"name" binding:"required"`
Age int `form:"age" binding:"required,gt=18"`
}
func main() {
r := gin.Default()
// 错误处理
r.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBindWith(&user, binding.Form); err != nil {
c.String(http.StatusBadRequest, err.Error())
return
}
c.String(http.StatusOK, "%#v", user)
})
r.Run() // listen and serve on
}