github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/validate/validate.go (about) 1 package validate 2 3 import ( 4 "github.com/artisanhe/tools/validate/validatetpl" 5 ) 6 7 type ValidateFn func(v interface{}) (bool, string) 8 9 func AddValidateFunc(name string, validateFunc ValidateFn) { 10 validatetpl.AddValidateFunc(name, validateFunc) 11 } 12 13 func GetValidateFunc(name string) (validateFunc ValidateFn, ok bool) { 14 return validatetpl.GetValidateFunc(name) 15 } 16 17 func ValidateItem(tagValidate string, v interface{}, tagErrMsg ...string) (valid bool, message string) { 18 var validateFn ValidateFn 19 var ok bool 20 if validateFn, ok = GetValidateFunc(tagValidate); !ok { 21 validateFn = validatetpl.GenerateValidateFuncByTag(tagValidate) 22 if validateFn != nil { 23 AddValidateFunc(tagValidate, validateFn) 24 } 25 } 26 if validateFn != nil { 27 valid, message = validateFn(v) 28 if !valid { 29 if len(tagErrMsg) > 0 && tagErrMsg[0] != "" { 30 message = tagErrMsg[0] 31 } 32 } 33 return 34 } 35 return true, "" 36 }