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

标签 go error-handling interface

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

相关文章:

java - 是否可以将匿名类从 Java 转换为 JRuby?

xml - Go - 使用相同的标签编码结构字段

go - 是否可以在golang中创建进程池

cocoa - 处理 Swift 3 中 (NS)URLSession 的 cocoa 错误

c# - 在对模型类应用Crud操作时,我在ASP.Net Mvc项目中出错

typescript - 无法分配给 'd',因为它不是变量 typescript

go - 数据库查询命令正在生成奇怪的 sql 查询

go - 从接口(interface)创建处理程序

node.js - 防止错误出现在 node.js 中的用户面前

java - 在 Java 中,是否有某种类接口(interface)强制其实现类具有特定字段