@@ -2,6 +2,8 @@ package main
22
33import (
44 "fmt"
5+ "reflect"
6+ "strings"
57
68 "github.com/go-playground/validator/v10"
79)
@@ -11,7 +13,7 @@ type User struct {
1113 FirstName string `json:"fname"`
1214 LastName string `json:"lname"`
1315 Age uint8 `validate:"gte=0,lte=130"`
14- Email string `validate:"required,email"`
16+ Email string `json:"e-mail" validate:"required,email"`
1517 FavouriteColor string `validate:"hexcolor|rgb|rgba"`
1618 Addresses []* Address `validate:"required,dive,required"` // a person can have a home and cottage...
1719}
@@ -31,6 +33,15 @@ func main() {
3133
3234 validate = validator .New ()
3335
36+ // register function to get tag name from json tags.
37+ validate .RegisterTagNameFunc (func (fld reflect.StructField ) string {
38+ name := strings .SplitN (fld .Tag .Get ("json" ), "," , 2 )[0 ]
39+ if name == "-" {
40+ return ""
41+ }
42+ return name
43+ })
44+
3445 // register validation for 'User'
3546 // NOTE: only have to register a non-pointer type for 'User', validator
3647 // interanlly dereferences during it's type checks.
@@ -48,7 +59,7 @@ func main() {
4859 FirstName : "" ,
4960 LastName : "" ,
5061 Age : 45 ,
51- Email : "Badger.Smith@gmail.com " ,
62+ Email : "Badger.Smith@gmail" ,
5263 FavouriteColor : "#000" ,
5364 Addresses : []* Address {address },
5465 }
@@ -67,10 +78,10 @@ func main() {
6778
6879 for _ , err := range err .(validator.ValidationErrors ) {
6980
70- fmt .Println (err .Namespace ())
71- fmt .Println (err .Field ())
72- fmt .Println (err .StructNamespace ()) // can differ when a custom TagNameFunc is registered or
73- fmt .Println (err .StructField ()) // by passing alt name to ReportError like below
81+ fmt .Println (err .Namespace ()) // can differ when a custom TagNameFunc is registered or
82+ fmt .Println (err .Field ()) // by passing alt name to ReportError like below
83+ fmt .Println (err .StructNamespace ())
84+ fmt .Println (err .StructField ())
7485 fmt .Println (err .Tag ())
7586 fmt .Println (err .ActualTag ())
7687 fmt .Println (err .Kind ())
@@ -101,8 +112,8 @@ func UserStructLevelValidation(sl validator.StructLevel) {
101112 user := sl .Current ().Interface ().(User )
102113
103114 if len (user .FirstName ) == 0 && len (user .LastName ) == 0 {
104- sl .ReportError (user .FirstName , "FirstName " , "fname " , "fnameorlname" , "" )
105- sl .ReportError (user .LastName , "LastName " , "lname " , "fnameorlname" , "" )
115+ sl .ReportError (user .FirstName , "fname " , "FirstName " , "fnameorlname" , "" )
116+ sl .ReportError (user .LastName , "lname " , "LastName " , "fnameorlname" , "" )
106117 }
107118
108119 // plus can do more, even with different tag than "fnameorlname"
0 commit comments