gpt4 book ai didi

go - 为什么我不能对类型 validator.FieldError 使用 Error()

转载 作者:行者123 更新时间:2023-12-03 02:23:25 24 4
gpt4 key购买 nike

我正在使用 go validator,一切都很好。我可以使用打印 err 中的所有内容,但不能使用 Error() 或将 err 转换为 string。有人可以帮我解决这个问题吗?

显示

err.Error undefined (type validator.FieldError has no field or method Error)

我的代码:

err = validate.Struct(myData)

if err != nil {

for _, err := range err.(validator.ValidationErrors) {
fmt.Println(err)
fmt.Println(err.Namespace())
fmt.Println(err.Field())
fmt.Println(err.StructNamespace())
fmt.Println(err.StructField())
fmt.Println(err.Tag())
fmt.Println(err.ActualTag())
fmt.Println(err.Kind())
fmt.Println(err.Type())
err.Error()

}

return
}

有什么方法可以使用接口(interface)Error()吗?或者将 err 转换为 string

最佳答案

您的“外部”err 是一个 error (由 validate.Struct() 返回),它有一个 Error() 方法。

但是 err 循环变量不是。您输入断言 validator.ValidationErrors来自“外部”err,即:

type ValidationErrors []FieldError

哪里FieldError是一个接口(interface)类型,但它没有 Error() 方法。

您可以在循环之前或之后(但不在循环内部)调用并打印“外部”err 变量的错误字符串。

if err != nil {
fmt.Println(err.Error())
for _, err := range err.(validator.ValidationErrors) {
// ...
}
}

为了避免这种困惑,请为循环变量使用不同的名称,特别是因为它不是 error 类型。 fieldErr 或简单的 fe (如字段错误)将是一个好名字。

关于go - 为什么我不能对类型 validator.FieldError 使用 Error(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58605845/

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