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 }