0Pricing
Go Academy · Урок

Привязка и проверка запросов

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 — локальная установка не требуется.

Все уроки этого курса

  1. Маршрутизатор Gin и группы маршрутов
  2. Привязка и проверка запросов
  3. Вспомогательные средства ответов и коды состояния
  4. Промежуточные обработчики Gin: аутентификация и журналирование
← Назад к Go Academy