ATTENTION: work in progress
A small validation library that allows to have multiple different validations on the same struct.
Example: a struct used for both cases, sign up and sign in:
type UserAuth struct {
Email string `signup:"email" signin:"email"`
Password string `signup:"notempty,eq=PasswordConfirmation" signin:"notempty"`
PasswordConfirmation string `signup:"notempty"`
}
usr := UserAuth{...}Init validator and register schemas:
v := val4go.New()
v.RegisterSchema("signup")
v.RegisterSchema("signin")Validate based on use case:
errs := v.Validate("signup", usr)or
errs := v.Validate("signin", usr)Checks to not be nil
Only pointers, slice and map are supported.
Name *string `signup:"reguired"`Checks to be non-zero values. Only string and slice are supported.
If field is a pointer, it checks first to not be nil
Name string `signup:"notempty"`Checks to be a valid email.
If field is a pointer, it checks first to not be nil
Email string `signup:"email"`Checks a minimum length/value.
Only string, int, int8, int16, int32, int64 are supported.
If field is a pointer, it checks first to not be nil
Name string `signup:"min=4"`Checks a maximum length/value.
Only string, int, int8, int16, int32, int64 are supported.
If field is a pointer, it checks first to not be nil
Name string `signup:"max=4"`Checks if it's an iso date.
Date string `signup:"date"`Checks an equality with the cross given field value.
Password string `signup:"eq=PasswordConfirmation"`
PasswordConfirmation stringv := val4go.New()
v.RegisterValidation("my-validation", func(vf reflect.Value, sf reflect.StructField, v reflect.Value, cf string) error {
// vf -> reflect.Value of a field being validated
// sf -> reflect.StructField of a field being validated
// v -> reflect.Value of a struct being validated
// cf -> string of a cross field name
// validate
return err
})
type UserAuth struct {
Email string `signup:"my-validation"`
}
v.RegisterSchema("signup")