在我的应用中,我使用validator.v9来验证我的模型。在验证之后,我可以转换error接口,它成功了,我在控制台上看到“OK”
err := v.ModelValidator.Struct(model)
if _, ok := err.(validator.ValidationErrors); ok {
fmt.Println("ValidateModel: OK")
} else{
fmt.Println("ValidateModel: FALSE")
}我需要将这个对象包装到另一个对象中,以便将来进行处理
type errValidation struct {
error
}
func ValidationError(err error) error {
return errValidation{err}
}但是,如果我试图在上面第一种情况下的同一个函数中将这个包装的对象强制转换回validator.ValidationErrors,那么它将失败
e := ValidationError(err)
if _, ok := e.(validator.ValidationErrors); ok {
fmt.Println("ValidationError: OK")
} else{
fmt.Println("ValidationError: FALSE")
}我在控制台里看到了
ValidateModel: OK
ValidationError: FALSE我怎样才能让这个造型从包装的对象中工作?
来自"gopkg.in/go-playground/validator.v9"的ValidationErrors如下所示
type ValidationErrors []FieldError
func (ve ValidationErrors) Error() string {
//.....
}发布于 2018-08-16 18:35:39
您的errValidation类型和validator.ValidationErrors类型是完全不同、截然不同的类型。如果接口值包含具体类型errValidation的值,则不能从该接口类型断言另一个具体类型,只能断言errValidation。
所以这将会起作用:
e := ValidationError(errors.New("some err"))
if _, ok := e.(errValidation); ok {
fmt.Println("ValidationError: OK")
} else {
fmt.Println("ValidationError: FALSE")
}输出将是(在Go Playground上试用):
ValidationError: OKhttps://stackoverflow.com/questions/51874875
复制相似问题