为了账号安全,请及时绑定邮箱和手机立即绑定

如果我包装我的对象,Golang 转换为自定义类型会失败

如果我包装我的对象,Golang 转换为自定义类型会失败

Go
慕码人8056858 2023-03-21 15:12:09
在我的应用程序中,我用来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


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 56 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信