在我的应用中,我使用validator.v9
验证模型。验证之后,我可以投射error
界面,并且界面成功,我在控制台上看到“确定”
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
如何从包装的对象中进行投射?
ValidationErrors
中的 "gopkg.in/go-playground/validator.v9"
看起来像这样
type ValidationErrors []FieldError
func (ve ValidationErrors) Error() string {
//.....
}
答案 0 :(得分:2)
您的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: OK