在我的应用程序中,我用来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: OKValidationError: FALSE我怎样才能使这个演员表从包装的对象中发挥作用?ValidationErrors从"gopkg.in/go-playground/validator.v9"看起来像这样type ValidationErrors []FieldErrorfunc (ve ValidationErrors) Error() string { //.....}
1 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
你的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
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报
0/150
提交
取消