// Package validate ... // // Description : validate ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2025-03-19 15:50 package validate import ( "errors" "fmt" "github.com/go-playground/validator/v10" "reflect" "strings" ) // GetValidateErr 格式化验证结果错误信息 // // Author : go_developer@163.com<白茶清欢> // // Date : 15:51 2025/3/19 func GetValidateErr(obj any, rawErr error, errMsgTag string) error { if len(errMsgTag) == 0 { errMsgTag = TagErrMsg } if nil == rawErr { return nil } if nil == obj { return rawErr } var ( ok bool validationErrs validator.ValidationErrors errString []string field reflect.StructField ) if ok = errors.As(rawErr, &validationErrs); !ok { return rawErr } objType := reflect.TypeOf(obj) if objType.Kind() == reflect.Ptr { objType = objType.Elem() } for _, validationErr := range validationErrs { if field, ok = objType.FieldByName(validationErr.Field()); ok { if e := field.Tag.Get(errMsgTag); e != "" { errString = append(errString, fmt.Sprintf("%s: %s", field.Tag.Get("json"), e)) continue } else { errString = append(errString, fmt.Sprintf("%s: %v", field.Tag.Get("json"), validationErr.Value())) } } errString = append(errString, validationErr.Error()) } return errors.New(strings.Join(errString, "\n")) }