123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package validator
- import (
- "reflect"
- "sync"
- "github.com/gin-gonic/gin/binding"
- "github.com/go-playground/validator/v10"
- )
- type DefaultValidator struct {
- once sync.Once
- validate *validator.Validate
- }
- var _ binding.StructValidator = &DefaultValidator{}
- func (v *DefaultValidator) ValidateStruct(obj any) error {
- if kindOfData(obj) == reflect.Struct {
- v.lazyinit()
- if err := v.validate.Struct(obj); err != nil {
- return err
- }
- }
- return nil
- }
- func (v *DefaultValidator) Engine() any {
- v.lazyinit()
- return v.validate
- }
- func (v *DefaultValidator) lazyinit() {
- v.once.Do(func() {
- v.validate = validator.New()
- v.validate.SetTagName("validate")
- _ = v.validate.RegisterValidation("chinesePhone", chinesePhone)
- _ = v.validate.RegisterValidation("isoPhone", isoPhone)
- _ = v.validate.RegisterValidation("idCard", idCard)
- _ = v.validate.RegisterValidation("chineseName", chineseName)
- })
- }
- func kindOfData(data any) reflect.Kind {
- value := reflect.ValueOf(data)
- valueType := value.Kind()
- if valueType == reflect.Ptr {
- valueType = value.Elem().Kind()
- }
- return valueType
- }
|