结合 GO GIN-GONIC GORM 和 VALIDATOR.V2

combining GO GIN-GONIC GORM and VALIDATOR.V2

我是 Go 的新手,我想通过设置 GIN-GONIC API 来启动。我找到了这个 tutorial,我对那个骨架很满意。但现在我坚持使用我添加的验证过程:"gopkg.in/validator.v2" 和

type Todo struct {
    gorm.Model
    Title     string `json:"title"`
    Completed int `json:"completed"`
}

变成了

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 呼叫发送:

"Error": "Type: unknown tag"

经过一番研究,我发现:

Using a non-existing validation func in a field tag will always return false and with error validate.ErrUnknownTag.

所以**validate:"size:2"**一定是错的...

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

c.JSON(500, gin.H{"Error": errs.Error()})

您似乎还没有定义 size 验证函数。你也可以。

Custom validation functions:

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)