Pular para o conteúdo

Binding

O Gin fornece um poderoso sistema de binding que analisa dados da requisição em structs Go e os valida automaticamente. Em vez de chamar manualmente c.PostForm() ou ler c.Request.Body, você define uma struct com tags e deixa o Gin fazer o trabalho.

Bind vs ShouldBind

O Gin oferece duas famílias de métodos de binding:

MétodoEm caso de erroUse quando
c.Bind, c.BindJSON, etc.Chama c.AbortWithError(400, err) automaticamenteVocê quer que o Gin trate as respostas de erro
c.ShouldBind, c.ShouldBindJSON, etc.Retorna o erro para você tratarVocê quer respostas de erro personalizadas

Na maioria dos casos, prefira ShouldBind para ter mais controle sobre o tratamento de erros.

Exemplo rápido

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")
}

Formatos suportados

O Gin pode vincular dados de diversas fontes: JSON, XML, YAML, TOML, dados de formulário (URL-encoded e multipart), query strings, parâmetros de URI e headers. Use a tag de struct apropriada (json, xml, yaml, form, uri, header) para mapear campos. As regras de validação vão na tag binding e utilizam a sintaxe do go-playground/validator.

Nesta seção