当前位置: 首页 > 面试题库 >

如果包装对象,将Golang强制转换为自定义类型会失败

白腾
2023-03-14
问题内容

在我的应用中,我用于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 {
     //.....
}

问题答案:

您的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


 类似资料:
  • 对API控制器的远程调用(通过RestTemboard)(从一侧返回已知对象的List([]),从远程侧返回未知类型的对象)返回

  • 有没有一种简单的方法可以做到这一点: 编辑:我写了一份正确答案的工作副本:

  • 我将springboot控制器与@RequestBody一起使用。我有以下json请求正文 我有一个对应的POJO 我有控制器就像 显然它不起作用,因为是请求中的字符串,而它在MyObject中是布尔值。我希望它有一个逻辑,所以如果在请求中,它将在MyObject中转换为布尔值。Spring有什么机制来实现这一点?

  • 我有一个类型 现在我想做这样的事情。 如何将我的 转换为基元类型? 它给我的错误是: 将“Rating”类型转换为“number”类型可能是错误的,因为这两种类型都没有充分重叠。如果这是有意的,首先将表达式转换为“未知” 我已经经历过了,但我想要的是它的反面 编辑: tsconfig.json tsc版本:3.2.1

  • 这是我的字符串格式的肥皂xml,我需要如何在Farm对象中形成它。Farm是我的自定义类,任何库都是现成的 使用此代码后,我得到了异常 意外元素(uri:“http://yyyyyy . yyyyy * * * * * * * *”,local:“farm”)。预期的元素有

  • 我试图创建一个函数,如果x和y是整数,则返回x和y之间的随机整数,但如果x或y是双精度的,则该函数返回x和y之间的双精度。但当我尝试使用整数时,它引发了一个异常:“类java.lang.integer不能转换为类java.lang.double(java.lang.integer和java.lang.double位于加载程序“引导程序”的模块java.base中)”“如何修复它?