验证器

validator

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()
}

打印结果

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

results matching ""

    No results matching ""