0

我对 Go 很陌生,我想通过设置 GIN-GONIC API 来启动。我找到了这个教程,我对这个骨架很满意。但现在我坚持使用我添加的验证过程:“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 调用发送:

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

经过一些研究,我发现:

在字段标签中使用不存在的验证函数将始终返回 false 并带有错误validate.ErrUnknownTag

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

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

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

1 回答 1

0

看起来你还没有定义size验证功能。你也可以做到。

自定义验证功能

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)
于 2017-02-10T10:22:08.433 回答