объединение GO GIN-GONIC GORM и VALIDATOR.V2

Я новичок в 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"** должно быть не так ...

Я не понимаю, как установить проверку, а также как отобразить правильную ошибку в «ловушке»:

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

person Stéphane MERLE    schedule 10.02.2017    source источник
comment
Спасибо l159, дважды прочитал ... но это непросто;)   -  person Stéphane MERLE    schedule 10.02.2017


Ответы (1)


Похоже, вы не определили 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)
person I159    schedule 10.02.2017
comment
Спасибо, я неправильно прочитал и подумал, что size - это встроенная функция, я, вероятно, смешал с gorm doc .... - person Stéphane MERLE; 10.02.2017
comment
Я не могу найти, где разместить validate.SetValidationFunc (size, size), когда после функции размера я получил: синтаксическая ошибка: оператор без объявления вне тела функции, но если я поместил его в основной, я получил undefined: проверить в validate.SetValidationFunc - person Stéphane MERLE; 10.02.2017
comment
Поместите перед validator.Validate(todo) - person I159; 10.02.2017
comment
Я сделал, но не работал: validate.SetValidationFunc (checkURL, checkURL) if errs: = validator.Validate (todo); errs! = nil {Я продолжаю получать: undefined: validate в validate.SetValidationFunc, и я добавил импорт для gopkg.in/validator.v2 и отразил .... - person Stéphane MERLE; 10.02.2017
comment
Это основы языка и не имеет отношения к вопросу. - person I159; 10.02.2017
comment
да, наверное, я кое-что еще не понял, вы правы, я вернусь к своим книгам, все равно спасибо! - person Stéphane MERLE; 10.02.2017