我正在使用 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/