JSON будет проанализирован здесь , а затем проверен здесь .
Комментарий к методу ValidateStruct по умолчанию:
ValidateStructполучает любой тип типа, но только выполняет структуру или указатель на тип структуры.
Вы можете обойти это, определив структуру, которая необходима для хранения ваших данных:
type itemHolder struct {
Items []item
}
Затем определение пользовательского Unmarshaler , например:
func (i *itemHolder) UnmarshalJSON(b []byte) error {
return json.Unmarshal(b, &i.Items)
}
Теперь *itemHolder
реализует json.Unmarshaler
, что, в свою очередь, означает, что это будет структура, которая поддерживаетсяby gin.
Этот код должен работать сейчас:
var items itemHolder
err := c.BindJSON(&items)
if err != nil {
// handle...
}
// use items.Items from here on
Обратите внимание, что ваше поведение маршала изменится;поэтому вам обязательно нужно реализовать интерфейс Marshaler , если вам нужно.