if err := global.Validator.Struct(&req); err != nil { for _, fieldError := range err.(validator.ValidationErrors) { response.FailWithMessage(fieldError.Translate(global.Translator), ctx) return } }
这里的fieldError我们可以获取当前报错的字段的信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
for _, err := range err.(validator.ValidationErrors) { fmt.Println(err.Namespace()) // User.Age fmt.Println(err.Field()) // Age fmt.Println(err.StructNamespace()) // User.Age fmt.Println(err.StructField()) // Age fmt.Println(err.Tag()) // lte fmt.Println(err.ActualTag()) // lte fmt.Println(err.Kind()) // uint8 fmt.Println(err.Type()) // uint8 fmt.Println(err.Value()) // 135 fmt.Println(err.Param()) // 130 fmt.Println(err.Error()) // Key: 'User.Age' Error:Field validation for 'Age' failed on the 'lte' tag fmt.Println() }
4.2 自定义校验方法:
需要自定义校验方法,只需要使用RegisterValidation即可。
1 2 3 4 5 6 7 8
// RegisterValidation adds a validation with the given tag // // NOTES: // - if the key already exists, the previous validation function will be replaced. // - this method is not thread-safe it is intended that these all be registered prior to any validation func(v *Validate) RegisterValidation(tag string, fn Func, callValidationEvenIfNull ...bool) error { return v.RegisterValidationCtx(tag, wrapFunc(fn), callValidationEvenIfNull...) }