增加单个数据、map数据验证

This commit is contained in:
2025-01-24 17:04:40 +08:00
parent 5fe0557d90
commit 50440cc8f9
4 changed files with 99 additions and 1 deletions

View File

@ -7,7 +7,10 @@
// Date : 2025-01-24 11:09
package v10
import "git.zhangdeman.cn/gateway/validator/v10/abstract"
import (
"git.zhangdeman.cn/gateway/validator/v10/abstract"
openValidator "github.com/go-playground/validator/v10"
)
// validatorRuleExpressGenerateFunc 验证规则表达式生成方法
var validatorRuleExpressGenerateFunc abstract.IValidateRuleGenerateFunc = DefaultValidateRuleGenerateFunc
@ -15,6 +18,9 @@ var validatorRuleExpressGenerateFunc abstract.IValidateRuleGenerateFunc = Defaul
// validatorRuleExpressGenerateFunc 字段验证规则生成默认表达式
var fieldValidatorRuleExpressGenerateFunc abstract.IFieldValidateRuleGenerateFunc = DefaultFieldValidateRuleGenerateFunc
// 验证器实例
var validateInstance = openValidator.New()
// SetValidatorRuleExpressGenerateFunc 使用自定义的验证规则表达式函数覆盖默认的函数
//
// Author : go_developer@163.com<白茶清欢>

65
v10/validate_value.go Normal file
View File

@ -0,0 +1,65 @@
// 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
}