package validate import ( "yitao/ecode" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" "github.com/kataras/iris/v12" ) var validate *validator.Validate var trans ut.Translator func InitValidator() { validate = validator.New() eng := zh.New() uni := ut.New(eng, eng) trans, _ = uni.GetTranslator("zh") addTranslation("min", "{0} 长度必须至少为 {1} 个字符") addTranslation("max", "{0} 长度不能超过 {1} 个字符") addTranslation("len", "{0} 长度应该为 {1} 个字符") } func addTranslation(tag string, tr string) { validate.RegisterTranslation(tag, trans, func(ut ut.Translator) error { return ut.Add(tag, tr, true) }, func(ut ut.Translator, fe validator.FieldError) string { t, _ := ut.T(tag, fe.Field(), fe.Param()) return t }) } func GetValidator() *validator.Validate { return validate } func ReadJSON(ctx iris.Context, result interface{}) *ecode.Ecode { ctx.ReadBody(result) err := GetValidator().Struct(result) if err != nil { validateErr := err.(validator.ValidationErrors) firstValue := "" for _, v := range validateErr.Translate(trans) { firstValue = v break // 退出循环,确保只获取第一个元素 } return ecode.Set(255, firstValue) } return ecode.OK() }