46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package validate
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/go-playground/locales/zh"
|
||
ut "github.com/go-playground/universal-translator"
|
||
"github.com/go-playground/validator/v10"
|
||
zh_translations "github.com/go-playground/validator/v10/translations/zh"
|
||
"reflect"
|
||
)
|
||
|
||
func Struct(s interface{}) (errMsg []string, err error) {
|
||
// 创建验证器实例
|
||
validate := validator.New()
|
||
|
||
// 创建中文翻译器
|
||
zh_ch := zh.New()
|
||
uni := ut.New(zh_ch, zh_ch)
|
||
trans, _ := uni.GetTranslator("zh")
|
||
|
||
//注册一个函数,获取struct tag里自定义的label作为字段名
|
||
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
|
||
name := fld.Tag.Get("label")
|
||
return name
|
||
})
|
||
|
||
// 注册中文翻译器到验证器
|
||
_ = zh_translations.RegisterDefaultTranslations(validate, trans)
|
||
|
||
// 验证结构体
|
||
err = validate.Struct(s)
|
||
if err != nil {
|
||
// 处理验证错误
|
||
if _, ok := err.(*validator.InvalidValidationError); ok {
|
||
fmt.Println("处理验证错误error:", err)
|
||
errMsg = append(errMsg, err.Error())
|
||
} else {
|
||
for _, v := range err.(validator.ValidationErrors) {
|
||
errMsg = append(errMsg, v.Translate(trans))
|
||
}
|
||
}
|
||
}
|
||
|
||
return
|
||
}
|