Validation 结合GO-GONIC GORM和VALIDATOR.V2

Validation 结合GO-GONIC GORM和VALIDATOR.V2,validation,go,go-gorm,go-gin,Validation,Go,Go Gorm,Go Gin,我是新手,我想通过设置一个GIN-gonicapi来启动。我发现了这个,我对这个骨架很满意。但现在我被验证过程卡住了,我添加了:“gopkg.in/validator.v2”和 变成 type Todo struct { gorm.Model Title string `json:"title" **validate:"size:2"**` Completed int `json:"completed"` } 然后在我添加的CreateTodo函数中: if e

我是新手,我想通过设置一个GIN-gonicapi来启动。我发现了这个,我对这个骨架很满意。但现在我被验证过程卡住了,我添加了:“gopkg.in/validator.v2”和

变成

type Todo struct {
    gorm.Model
    Title     string `json:"title" **validate:"size:2"**`
    Completed int `json:"completed"`
}
然后在我添加的
CreateTodo
函数中:

if errs := validator.Validate(todo); errs!=nil {
    c.JSON(500, gin.H{"Error": errs.Error()})
}
但随后,一个POST call发送:

“错误”:“类型:未知标记”

经过一些研究,我发现:

在字段标记中使用不存在的验证func将始终返回false,并出现错误
validate.ErrUnknownTag

因此,
**验证:“大小:2”**
一定是错误的

我不知道如何设置验证以及如何在“catch”中显示正确的错误:


看起来您尚未定义验证函数。你也能做到

:
谢谢l159,我读了两遍。。。但这并不容易;)谢谢,我读错了,认为size是一个内置函数,我可能和gorm文档混在一起了……我找不到validate.SetValidationFunc(“size”,size)放在哪里在size函数之后,我得到了:语法错误:函数体之外的非声明语句,但如果我把它放在main中,我得到了未定义的:validate in validate.SetValidationFunc将它放在
validator.validate(todo)
之前,但没有工作:validate.SetValidationFunc(“checkURL”,checkURL)if errs:=validator.validate(todo);错=nil{我一直得到:undefined:validate in validate.SetValidationFunc,我确实为“gopkg.in/validator.v2”和“reflect”添加了导入功能……是的,我可能误解了其他内容,你是对的,我将回到我的书中,无论如何谢谢!
if errs := validator.Validate(todo); errs!=nil {
    c.JSON(500, gin.H{"Error": errs.Error()})
}
c.JSON(500, gin.H{"Error": errs.Error()})
func size(v interface{}, param int) error {
    st := reflect.ValueOf(v)
    if st.Kind() != reflect.String {
        return validate.ErrUnsupported
    }

    if utf8.RuneCountInString(st.String()) != param {
        return errors.New("Wrong size")
    }
    return nil
}

validate.SetValidationFunc("size", size)