Перейти к содержимому

Привязка данных

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.

В этом разделе