Go语言参数校验(go-playground / validator)

基本使用Go语言没有像Java一样的注解快速进行参数的校验,但可以通过struct tag(结构体标签)进行序列化。常用的如:

type User struct {
    
    
	ID string `json:"id"`
	Name string `json:"name"`
	Age string `json:"age"`
} 

但需要更复杂的校验,这时需要用一些专业的库来完成。go-playground / validator作为一款优秀的Go语言校验库,基于标记为结构体和单个字段实现值验证。使用简单、快捷。

添加依赖

go get github.com/go-playground/validator

代码

package main

import (
	"fmt"
	"github.com/go-playground/validator"
)

var validate *validator.Validate //定义

type User struct {
    
    
	Name  string `validate:"required"`       //非空
	Age   uint8  `validate:"gte=0,lte=120"`  //  0<=Age<=120
	Email string `validate:"required,email"` //非空,email格式
	//dive关键字代表 进入到嵌套结构体进行判断
	Address []*Address `validate:"dive"` //  可以拥有多个地址
}
type Address struct {
    
    
	Province string `validate:"required"`       //非空
	City     string `validate:"required"`       //非空
	Phone    string `validate:"numeric,len=11"` //数字类型,长度为11
}

func main() {
    
    
	validate = validator.New() //初始化(赋值)
	validateStruct()           //结构体校验
	validateVariable()         //变量校验
}
func validateStruct() {
    
    
	address := Address{
    
    
		Province: "北京",
		City:     "北京",
		Phone:    "17694911282x",
	}
	user := User{
    
    
		Name:    "朝阳",
		Age:     23,
		Email:   "[email protected]",
		Address: []*Address{
    
    &address},
	}
	err := validate.Struct(user)
	if err != nil {
    
    
		//断言为:validator.ValidationErrors,类型为:[]FieldError
		for _, e := range err.(validator.ValidationErrors) {
    
    
			fmt.Println("Namespace:", e.Namespace())
			fmt.Println("Field:", e.Field())
			fmt.Println("StructNamespace:", e.StructNamespace())
			fmt.Println("StructField:", e.StructField())
			fmt.Println("Tag:", e.Tag())
			fmt.Println("ActualTag:", e.ActualTag())
			fmt.Println("Kind:", e.Kind())
			fmt.Println("Type:", e.Type())
			fmt.Println("Value:", e.Value())
			fmt.Println("Param:", e.Param())
			fmt.Println()
		}

		fmt.Println("结构体输入数据类型错误!")
		return
	} else {
    
    
		fmt.Println("结构体校验通过")
	}
}

//变量校验
func validateVariable() {
    
    
	myEmail := "[email protected]" //邮箱地址:[email protected]
	err := validate.Var(myEmail, "required,email")
	if err != nil {
    
    
		fmt.Println(err)
	} else {
    
    
		fmt.Println("变量校验通过!")
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43874301/article/details/120652881