# 验证器
## validator
```go
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
// Validate 全局验证器
var Validate *validator.Validate
func init() {
Validate = validator.New()
}
// User 结构体
type User struct {
Name string `json:"name" validate:"required"` //名称,必须
Gender int `json:"gender"` //性别,不做要求
Age int `json:"age" validate:"gte=0,lte=130"` //年龄,0-130
Email string `json:"email" validate:"required,email"` //邮箱,必须
Book Book `json:"book validate,dive,validate"` //书籍结构体,必须
}
// Book 书籍
type Book struct {
Edu string `json:"edu"`
Fiction string `json:"fiction" validate:"required"` // 必须
}
// Validate 结构体封装验证器
func (c *User) Validate() {
err := Validate.Struct(c)
if err != nil {
c.ErrArgs(err)
}
return
}
// ErrArgs 结构体封装错误返回
func (c *User) ErrArgs(err error) {
fmt.Println(err)
}
func main() {
// 1.模拟前端传值
user := &User{
Name: "小明", // 不能为空
Age: 23, //年龄超过130岁
Email: "foo@@bar.com", // 不能为空,且为邮箱格式
Book: Book{
Edu: "离散数学及其应用", // 无要求
//Fiction: "鹿鼎记", // 不能为空
},
}
// 2.使用验证器校验
// 注:验证不通过直接返回错误给web端
user.Validate()
}
```
打印结果
```bash
Key: 'User.Email' Error:Field validation for 'Email' failed on the 'email' tag
Key: 'User.Book.Fiction' Error:Field validation for 'Fiction' failed on the 'required' tag
```