gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:40:51 25 4
gpt4 key购买 nike

在我的应用程序中,我使用 validator.v9 来验证我的模型。验证后我可以转换 error 接口(interface)并且它成功了,我在控制台上看到“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

我怎样才能从包装的对象中进行转换?

"gopkg.in/go-playground/validator.v9" 中的

ValidationErrors 看起来像这样

type ValidationErrors []FieldError
func (ve ValidationErrors) Error() string {
//.....
}

最佳答案

您的 errValidation 类型和 validator.ValidationErrors 类型是完全不同的不同类型。如果接口(interface)值包含具体类型 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

关于如果我包装我的对象,Golang 转换为自定义类型会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51874875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com