package main
import("fmt""github.com/go-playground/validator/v10")// User contains user informationtype User struct{
FirstName string`validate:"required"`
LastName string`validate:"required"`
Age uint8`validate:"gte=0,lte=130"`
Email string`validate:"required,email"`
FavouriteColor string`validate:"iscolor"`// alias for 'hexcolor|rgb|rgba|hsl|hsla'
Addresses []*Address `validate:"required,dive,required"`// a person can have a home and cottage...}// Address houses a users address informationtype Address struct{
Street string`validate:"required"`
City string`validate:"required"`
Planet string`validate:"required"`
Phone string`validate:"required"`}// use a single instance of Validate, it caches struct infovar validate *validator.Validate
funcmain(){
validate = validator.New()validateStruct()validateVariable()}funcvalidateStruct(){
address :=&Address{
Street:"Eavesdown Docks",
Planet:"Persphone",
Phone:"none",}
user :=&User{
FirstName:"Badger",
LastName:"Smith",
Age:135,
Email:"Badger.Smith@gmail.com",
FavouriteColor:"#000-",
Addresses:[]*Address{address},}// returns nil or ValidationErrors ( []FieldError )
err := validate.Struct(user)if err !=nil{// this check is only needed when your code could produce// an invalid value for validation such as interface with nil// value most including myself do not usually have code like this.if_, ok := err.(*validator.InvalidValidationError); ok {
fmt.Println(err)return}for_, err :=range err.(validator.ValidationErrors){
fmt.Println(err.Namespace())
fmt.Println(err.Field())
fmt.Println(err.StructNamespace())
fmt.Println(err.StructField())
fmt.Println(err.Tag())
fmt.Println(err.ActualTag())
fmt.Println(err.Kind())
fmt.Println(err.Type())
fmt.Println(err.Value())
fmt.Println(err.Param())
fmt.Println()}// from here you can create your own error messages in whatever language you wishreturn}// save user to database}funcvalidateVariable(){
myEmail :="joeybloggs.gmail.com"
errs := validate.Var(myEmail,"required,email")if errs !=nil{
fmt.Println(errs)// output: Key: "" Error:Field validation for "" failed on the "email" tagreturn}// email ok, move on}