Привязка данных
Gin предоставляет мощную систему привязки данных, которая разбирает данные запроса в структуры Go и автоматически их валидирует. Вместо ручного вызова c.PostForm() или чтения c.Request.Body, вы определяете структуру с тегами, и Gin делает всю работу.
Bind vs ShouldBind
Gin предлагает два семейства методов привязки:
| Метод | При ошибке | Когда использовать |
|---|---|---|
c.Bind, c.BindJSON и т.д. | Автоматически вызывает c.AbortWithError(400, err) | Когда вы хотите, чтобы Gin обрабатывал ответы об ошибках |
c.ShouldBind, c.ShouldBindJSON и т.д. | Возвращает ошибку для вашей обработки | Когда вам нужны пользовательские ответы об ошибках |
В большинстве случаев предпочтительнее использовать ShouldBind для большего контроля над обработкой ошибок.
Быстрый пример
type LoginForm struct { User string `form:"user" binding:"required"` Password string `form:"password" binding:"required"`}
func main() { router := gin.Default()
router.POST("/login", func(c *gin.Context) { var form LoginForm // ShouldBind checks Content-Type to select a binding engine automatically if err := c.ShouldBind(&form); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"status": "logged in"}) })
router.Run(":8080")}Поддерживаемые форматы
Gin может привязывать данные из множества источников: JSON, XML, YAML, TOML, данные форм (URL-кодированные и multipart), строки запроса, URI-параметры и заголовки. Используйте соответствующий тег структуры (json, xml, yaml, form, uri, header) для сопоставления полей. Правила валидации указываются в теге binding и используют синтаксис go-playground/validator.
В этом разделе
- Привязка модели и валидация — Основные концепции привязки и правила валидации
- Пользовательские валидаторы — Регистрация собственных функций валидации
- Привязка строки запроса или POST-данных — Привязка из строк запроса и тел форм
- Привязка URI — Привязка параметров пути в структуры
- Привязка заголовков — Привязка HTTP-заголовков в структуры
- Значения по умолчанию — Установка резервных значений для отсутствующих полей
- Формат коллекций — Обработка параметров-массивов в запросе
- Пользовательский unmarshaler — Реализация пользовательской логики десериализации
- Привязка HTML-чекбоксов — Обработка ввода чекбоксов форм
- Привязка Multipart/urlencoded — Привязка данных multipart-форм
- Пользовательский тег структуры — Использование пользовательских тегов структур для сопоставления полей
- Привязка тела к разным структурам — Разбор тела запроса более одного раза