// Package v10 ... // // Description : v10 ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2025-01-24 16:42 package v10 import ( "git.zhangdeman.cn/gateway/validator/v10/define" "git.zhangdeman.cn/zhangdeman/wrapper" "sync" ) // ValidateVar 验证任意变量值 // // Author : go_developer@163.com<白茶清欢> // // Date : 16:44 2025/1/24 func ValidateVar(inputVal any, ruleConfig define.FieldValidateGenerateConfig) error { validateRuleExpress, err := fieldValidatorRuleExpressGenerateFunc(ruleConfig) if nil != err { return err } if err = validateInstance.Var(inputVal, validateRuleExpress); nil != err { return err } return nil } // ValidateMap 验证Map数据 // // Author : go_developer@163.com<白茶清欢> // // Date : 16:56 2025/1/24 // // 参数: // - inputMap: 输入的map数据 // - ruleConfigMap: map数据每一项的验证规则 // // 返回值: // - 验证结果表, key为验证的字段, val为验证的错误信息, 返回异常表长度为 0, 说明验证通过 func ValidateMap(inputMap map[string]any, ruleConfigMap map[string]define.FieldValidateGenerateConfig) map[string]error { errTable := map[string]error{} lock := &sync.RWMutex{} wg := &sync.WaitGroup{} wg.Add(len(inputMap)) for mapKey, mapVal := range inputMap { go func(key string, val any) { defer wg.Done() if _, exist := ruleConfigMap[mapKey]; !exist { // 未传入验证规则, 不验证 return } if err := ValidateVar(val, ruleConfigMap[key]); nil != err { // 验证失败 lock.Lock() defer lock.Unlock() errTable[key] = err } }(mapKey, mapVal) } wg.Wait() return errTable } // ValidateDynamicStruct 验证动态结构体 // // Author : go_developer@163.com<白茶清欢> // // Date : 17:28 2025/1/24 func ValidateDynamicStruct(inputMap map[string]any, ruleConfigMap map[string]define.FieldValidateGenerateConfig) error { realMapData := make(map[string]any) tagMap := make(map[string]string) for mapKey, mapVal := range inputMap { if _, exist := ruleConfigMap[mapKey]; !exist { continue } realMapData[mapKey] = mapVal express, err := fieldValidatorRuleExpressGenerateFunc(ruleConfigMap[mapKey]) if nil != err { return err } tagMap[mapKey] = "validate:\"" + express + "\"" } dynamicStruct := wrapper.NewMap2DynamicStruct(realMapData, tagMap) structVal := dynamicStruct.ToStructDefaultValue() return validateInstance.Struct(structVal) }