# 驗證器
## 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
```