in validator.go [109:128]
func tryValidate(val reflect.Value) error {
t := val.Type()
var validator Validator
if (t.Kind() == reflect.Ptr || t.Kind() == reflect.Interface) && val.IsNil() {
return nil
}
if t.Implements(tValidator) {
validator = val.Interface().(Validator)
} else if reflect.PtrTo(t).Implements(tValidator) {
val = pointerize(reflect.PtrTo(t), t, val)
validator = val.Interface().(Validator)
}
if validator == nil {
return nil
}
return validator.Validate()
}