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

我正在使用 go 验证器,一切都很好。我可以使用 print err 中的所有内容,但无法使用Error()或转换errto 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

}

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


蝴蝶不菲
浏览 64回答 1
1回答

ITMISS

你的“外部”err是一个error(由 返回validate.Struct()),它有一个Error()方法。但err循环变量不是。您validator.ValidationErrors从“outer”输入assert err,即:type ValidationErrors []FieldError其中FieldError是接口类型但它没有Error()方法。err您可以在循环之前或之后(但不在循环内部)调用并打印“外部”变量的错误字符串。if err != nil {    fmt.Println(err.Error())    for _, err := range err.(validator.ValidationErrors) {        // ...    }}为了避免这种混乱,请为循环变量使用不同的名称,特别是因为它不是 类型error。fieldErr或者简单地fe(如字段错误)将是一个好名字。
打开App,查看更多内容
随时随地看视频慕课网APP