[Go实战]go-validator开源库 验证专用

87 阅读1分钟

go get "gopkg.in/go-playground/validator.v9"

package main

import (
	"fmt"
	"reflect"
	"time"

	"gopkg.in/go-playground/validator.v9"
)

type AddressDefault struct {
	Name   string "user name"
	Passwd string "user password"
}

func validatorDefault() {
	user := &AddressDefault{"chronos", "pass"}
	s := reflect.TypeOf(user).Elem()
	fmt.Println(reflect.TypeOf(s))
	for i := 0; i < s.NumField(); i++ {
		fmt.Println(s.Field(i).Tag)
	}
}


type AddressV1 struct {
	Street string `validate:"required"`
	City   string `validate:"required"`
	Planet string `validate:"required"`
	Phone  string `validate:"required"`
	Age    int    `validate:"min=12,max=15"`
}

func validatorV1() {
	address := &AddressV1{
		Street: "Eavesdown Docks",
		City:   "beijing",
		Planet: "Persphone",
		Phone:  "none",
		Age:    9,
	}
	validate := validator.New()
	err := validate.Struct(address)
	fmt.Println(err)
}

type AddressV2 struct {
	Street   string    `validate:"required"`
	City     string    `validate:"required"`
	Planet   string    `validate:"required"`
	Phone    string    `validate:"required"`
	Age      int       `validate:"min=12,max=15"`
	CreateAt time.Time `validate:"myParam=this is called param"`
}

func validatorV2() {
	mytimeFunc := func(fl validator.FieldLevel) bool {
		fmt.Println("FieldName:", fl.FieldName())
		fmt.Println("StructFieldName", fl.StructFieldName())
		fmt.Println("Parm:", fl.Param())
		return true
	}

	address := &AddressV2{
		Street: "Eavesdown Docks",
		City:   "beijing",
		Planet: "Persphone",
		Phone:  "none",
		Age:    12,
	}
	validate := validator.New()
	// 自己定义tag标签以及与之对应的处理逻辑
	validate.RegisterValidation("myParam", mytimeFunc)
	// 查看是否符合验证
	err := validate.Struct(address)
	fmt.Println(err)
}

func main() {
	validatorDefault()
	validatorV1()
	validatorV2()
}