ai_scheduler/internal/pkg/validate/validate.go

46 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}