我正在使用go验证器,一切都很好。我可以使用从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
}
是否可以使用接口Error()
?还是将err
转换为string
?
答案 0 :(得分:1)
您的“外部” err
是error
(由validate.Struct()
返回),它具有Error()
方法。
但是err
循环变量不是。您从“外部” err
中输入断言validator.ValidationErrors
,
type ValidationErrors []FieldError
FieldError
是接口类型,但没有Error()
方法。
您可以在循环之前或之后(但不在循环内部)调用并打印“外部” err
变量的错误字符串。
if err != nil {
fmt.Println(err.Error())
for _, err := range err.(validator.ValidationErrors) {
// ...
}
}
为避免此类混淆,请为循环变量使用其他名称,尤其是因为它不是error
类型的变量。 fieldErr
或简单地fe
(例如在字段错误中)将是一个好名字。