问答

not validator.ValidationErrors (types from different package

作者:admin 2021-08-03 我要评论

完成错误: interface conversion: error is validator.ValidationErrors, not validator.ValidationErrors (types from different packages) 诉求: 写了一个简...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

完成错误:
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

整个项目仅一处使用了这个包,且确定没有其他验证类的包在项目其他文件有引入。
image.png

###

这个问题我花了点时间找到了根源,见下图。
image.png

早期go-gin使用的go-playground/validator包地址是gopkg.in/go-playground,网上留了大量的资料(随便举几个例:ABC),而现在go-gin使用的是v10,依赖的包地址github.com/go-playground/validator,不是gopkg.in/go-playground/validator.v10,这就造成了这次遇到的问题。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • not validator.ValidationErrors (type

    not validator.ValidationErrors (type

  • antd的cascader动态加载需要点击两下才

    antd的cascader动态加载需要点击两下才

  • “从输入url到页面展现发生了什么?”

    “从输入url到页面展现发生了什么?”

  • git 分支合并错误并且已经多次push操作

    git 分支合并错误并且已经多次push操作

腾讯云代理商
海外云服务器