验证器

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