Skip to content

Commit c370ccf

Browse files
committed
Clarify and complete tag names example
1 parent 94aa424 commit c370ccf

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

_examples/simple/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ func validateStruct() {
6868

6969
fmt.Println(err.Namespace())
7070
fmt.Println(err.Field())
71-
fmt.Println(err.StructNamespace()) // can differ when a custom TagNameFunc is registered or
72-
fmt.Println(err.StructField()) // by passing alt name to ReportError like below
71+
fmt.Println(err.StructNamespace())
72+
fmt.Println(err.StructField())
7373
fmt.Println(err.Tag())
7474
fmt.Println(err.ActualTag())
7575
fmt.Println(err.Kind())

_examples/struct-level/main.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package main
22

33
import (
44
"fmt"
5+
"reflect"
6+
"strings"
57

68
"gopkg.in/go-playground/validator.v9"
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

Comments
 (0)