Привязка и проверка запросов
ShouldBindJSON, теги привязки и validator
«Привязка и проверка запросов» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Привязка тела запроса
Gin может привязывать JSON, XML, данные формы и строки запроса к структурам Go с помощью структурного тега binding и функций c.ShouldBind*:
type CreateUserRequest struct {
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
Age int `json:"age" binding:"gte=0,lte=150"`
}
func createUser(c *gin.Context) {
var req CreateUserRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
}ShouldBind и MustBind
ShouldBind* возвращает ошибку, чтобы Вы могли обработать её самостоятельно. Bind* (вариант Must) автоматически записывает ответ 400 и прерывает обработку при ошибке — используйте ShouldBind для собственных ответов с ошибками.
Привязка параметров запроса
Привяжите параметры строки запроса к структуре с помощью c.ShouldBindQuery:
type ListRequest struct {
Page int `form:"page" binding:"gte=1"`
Limit int `form:"limit" binding:"gte=1,lte=100"`
}
var q ListRequest
c.ShouldBindQuery(&q)Привязка параметров пути
Привяжите параметры пути к структуре с помощью c.ShouldBindUri:
type IDParam struct {
ID int64 `uri:"id" binding:"required,gt=0"`
}
var p IDParam
c.ShouldBindUri(&p)Теги валидации
Gin использует github.com/go-playground/validator/v10. Распространённые теги: required, email, min, max, gte, lte, len, oneof.
Пользовательские валидаторы
Зарегистрируйте собственную функцию валидации с помощью binding.Validator.Engine():
validate := binding.Validator.Engine().(*validator.Validate)
validate.RegisterValidation("username", validateUsername)Ответ с ошибкой валидации
Преобразуйте ошибки валидатора в понятный пользователю ответ с именами полей и сообщениями:
var ve validator.ValidationErrors
if errors.As(err, &ve) {
errs := make([]string, len(ve))
for i, e := range ve {
errs[i] = fmt.Sprintf("%s: %s", e.Field(), e.Tag())
}
c.JSON(400, gin.H{"errors": errs})
}Файлы в multipart-форме
Обрабатывайте загрузку файлов с помощью c.FormFile:
file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./uploads/"+file.Filename)Согласование Content-Type
ShouldBind автоматически выбирает способ привязки на основе Content-Type: JSON для application/json и форму для application/x-www-form-urlencoded.
Максимальный размер тела запроса
Ограничьте размер тела запроса, чтобы предотвратить исчерпание памяти:
r.MaxMultipartMemory = 8 << 20 // 8 MiB for multipartВалидация вложенных структур
Валидация рекурсивно выполняется для вложенных структур. Используйте dive, чтобы проверять элементы среза:
Tags []string `json:"tags" binding:"required,dive,min=1,max=30"`Быстрая проверка
В чём разница между c.ShouldBindJSON и c.BindJSON в Gin?
Повторение: привязка запроса
Ключевые моменты:
- ShouldBindJSON/ShouldBindQuery/ShouldBindUri для типизированной привязки
- Теги binding:"required,email,gte=0" через go-playground/validator
- Пользовательские валидаторы через binding.Validator.Engine()
- Разбирайте ValidationErrors для получения сообщений об ошибках на уровне полей
Часто задаваемые вопросы
Урок «Привязка и проверка запросов» бесплатный?
Да — полный текст урока «Привязка и проверка запросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Привязка и проверка запросов»?
ShouldBindJSON, теги привязки и validator Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Привязка и проверка запросов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Маршрутизатор Gin и группы маршрутов
- Привязка и проверка запросов
- Вспомогательные средства ответов и коды состояния
- Промежуточные обработчики Gin: аутентификация и журналирование