From 50440cc8f9ec996cb02235e074d4e550b0a820d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Fri, 24 Jan 2025 17:04:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8D=95=E4=B8=AA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E3=80=81map=E6=95=B0=E6=8D=AE=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 9 ++++++ go.sum | 18 ++++++++++++ v10/init.go | 8 +++++- v10/validate_value.go | 65 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 v10/validate_value.go diff --git a/go.mod b/go.mod index 52d18a4..e42bacc 100644 --- a/go.mod +++ b/go.mod @@ -18,9 +18,14 @@ require ( github.com/BurntSushi/toml v1.4.0 // indirect github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/go-ini/ini v1.67.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.24.0 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/jtolds/gls v4.20.0+incompatible // indirect + github.com/leodido/go-urn v1.4.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mozillazg/go-pinyin v0.20.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -28,6 +33,10 @@ require ( github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/net v0.34.0 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 70e3005..ac2b7e0 100644 --- a/go.sum +++ b/go.sum @@ -12,12 +12,22 @@ github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+I github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= +github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg= +github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -44,6 +54,14 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/v10/init.go b/v10/init.go index 418ae36..fbb6fdd 100644 --- a/v10/init.go +++ b/v10/init.go @@ -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<白茶清欢> diff --git a/v10/validate_value.go b/v10/validate_value.go new file mode 100644 index 0000000..f19450b --- /dev/null +++ b/v10/validate_value.go @@ -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 +}