not validator.ValidationErrors (types from different packages)
完成错误:interface conversion: error is validator.ValidationErrors, not validator.ValidationErrors (types from different packages)
诉求:
写了一个简单的Go gin项目,只有一个功能,所以不会太复杂。写到最后打算封装下基础的部分,于是欲封装下验证这一块。
代码如下:
// Bind : bind request dto and auto verify parameters
func Bind(c *gin.Context, obj interface{}) error {
_ = c.ShouldBindUri(obj)
if err := c.ShouldBind(obj); err != nil {
util.Log.Notice(reflect.TypeOf(err))
util.Log.Notice(err.(validator.ValidationErrors))
if fieldErr, ok := err.(validator.ValidationErrors); ok {
var tagErrorMsg []string
for _, v := range fieldErr {
if _, has := ValidateErrorMessage[v.Tag]; has {
tagErrorMsg = append(tagErrorMsg, fmt.Sprintf(ValidateErrorMessage[v.Tag], v.Field, v.Value))
} else {
tagErrorMsg = append(tagErrorMsg, err.Error())
}
}
return errors.New(strings.Join(tagErrorMsg, ","))
}
}
return nil
}
引入文件如下:
import (
"FoodBackend/pkg/util"
"reflect"
"fmt"
"github.com/gin-gonic/gin"
"github.com/pkg/errors"
"gopkg.in/go-playground/validator.v8"
"strings"
)
会在这样使用err.(validator.ValidationErrors)
时报错。err
的类型也是validator.ValidationErrors
。
整个项目仅一处使用了这个包,且确定没有其他验证类的包在项目其他文件有引入。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个问题我花了点时间找到了根源,见下图。
早期go-gin使用的
go-playground/validator
包地址是gopkg.in/go-playground
,网上留了大量的资料(随便举几个例:A、B、C),而现在go-gin使用的是v10,依赖的包地址是github.com/go-playground/validator
,不是gopkg.in/go-playground/validator.v10
,这就造成了这次遇到的问题。