Skip to content

Instantly share code, notes, and snippets.

@yurakawa
Last active March 10, 2019 07:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yurakawa/0daa6e8f455dc2a0d5a1fa22cf2ebc25 to your computer and use it in GitHub Desktop.
Save yurakawa/0daa6e8f455dc2a0d5a1fa22cf2ebc25 to your computer and use it in GitHub Desktop.
go-playground/validator(validator.v9) で struct の tag情報を取得する
package main
import (
"fmt"
"gopkg.in/go-playground/validator.v9"
"reflect"
"strings"
)
type User struct {
Name string `json:"name" validate:"required"`
Email string `json:"email" validate:"required,email"`
}
type ValidationError struct {
Field string `json:"field"`
}
func NewValidator() *validator.Validate {
validate := validator.New()
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
if name == "-" {
return ""
}
return name
})
return validate
}
func ValidationErrorHandler(err error) (errorFields []ValidationError) {
errors := err.(validator.ValidationErrors)
errorFields = make([]ValidationError, len(errors))
for i, err := range errors {
errorFields[i] = ValidationError{
err.Field(),
}
}
return
}
func main() {
p := &User{"Bob", "InvalidEmail"}
v := NewValidator()
if err := v.Struct(p); err != nil {
invalidTagName := ValidationErrorHandler(err)
fmt.Printf("%s is Invalid: ", invalidTagName)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment