package validator import ( "errors" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" zhTranslations "github.com/go-playground/validator/v10/translations/zh" "reflect" ) var zhLocales = zh.New() var validate = validator.New() var uni = ut.New(zhLocales) var trans, _ = uni.GetTranslator("zh") // 验证器注册翻译器 var _ = zhTranslations.RegisterDefaultTranslations(validate, trans) func init() { //注册一个函数,获取struct tag里自定义的label作为字段名 validate.RegisterTagNameFunc(func(fld reflect.StructField) string { if label := fld.Tag.Get("label"); len(label) > 0 { return label } if jsonField := fld.Tag.Get("json"); len(jsonField) > 0 { return jsonField } return fld.Name }) } func ValidateStruct(data interface{}) (err error) { err = validate.Struct(data) if err != nil { for _, e := range err.(validator.ValidationErrors) { err = errors.New(e.Translate(trans)) break } } return }