Полученная ошибка красноречива:
interface conversion: interface {} is *data.Product, not data.Product
Строка r.Context().Value(KeyProduct{})
возвращает тип интерфейса interface{}
, который, как сообщает ошибка, содержит значение конкретный тип *data.Product
( указатель на data.Product
)
Вместо этого вы пытаетесь преобразовать его в data.Product
, не проверяя, допустимо ли преобразование.
Замените строку на:
prod := r.Context().Value(KeyProduct{}).(*data.Product)
Возможно, вы захотите прочитать Go Обзор утверждений типа .
После обновления ошибка, которая у вас сейчас есть, все еще та же проблема:
interface conversion: error is nil, not validator.ValidationErrors
С выражением err.(validator.FieldError)
вы пытаетесь преобразовать err
в validator.FieldError
, когда err
на самом деле nil
.
Предыдущая проверка len(errs) == 0
только проверяет, что длина errs
не равна нулю, но срез может иметь ненулевую длину и содержать nil
значения.
Вместо этого вы можете проверить утверждение типа:
if fe, ok := err.(validator.FieldError); ok {
ve := ValidationError{fe}
returnErrs = append(returnErrs, ve)
}