代码之家  ›  专栏  ›  技术社区  ›  Vitalii

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

  •  2
  • Vitalii  · 技术社区  · 6 年前

    在我使用的应用程序中 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
    

    我怎样才能用包装好的物体来制作这个造型呢?

    ValidationErrors "gopkg.in/go-playground/validator.v9" 看起来像这样

    type ValidationErrors []FieldError
    func (ve ValidationErrors) Error() string {
         //.....
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   icza    6 年前

    你的 errValidation 类型和 validator.ValidationErrors 错误验证 错误验证 .

    所以这是可行的:

    e := ValidationError(errors.New("some err"))
    if _, ok := e.(errValidation); ok {
        fmt.Println("ValidationError: OK")
    } else {
        fmt.Println("ValidationError: FALSE")
    }
    

    Go Playground ):

    ValidationError: OK