validator/v10/validate_value.go

66 lines
1.6 KiB
Go

// 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"
"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
}