在我的应用中,我用于validator.v9验证模型。验证后,我可以强制转换error界面并成功,在控制台上看到“确定”
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从上面的第一种情况转换到刚好在转换下面的相同功能中,则会失败
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"看起来像这样
ValidationErrors
"gopkg.in/go-playground/validator.v9"
type ValidationErrors []FieldError func (ve ValidationErrors) Error() string { //..... }
您的errValidation类型和validator.ValidationErrors类型完全不同,类型不同。如果接口值包含具体类型的值errValidation,则不能仅通过类型断言另一个具体类型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