Saltearse al contenido

Enlace de datos

Gin proporciona un potente sistema de enlace de datos que analiza los datos de la solicitud en structs de Go y los valida automáticamente. En lugar de llamar manualmente a c.PostForm() o leer c.Request.Body, defines un struct con etiquetas y dejas que Gin haga el trabajo.

Bind vs ShouldBind

Gin ofrece dos familias de métodos de enlace:

MétodoEn caso de errorUsar cuando
c.Bind, c.BindJSON, etc.Llama a c.AbortWithError(400, err) automáticamenteQuieres que Gin maneje las respuestas de error
c.ShouldBind, c.ShouldBindJSON, etc.Devuelve el error para que tú lo manejesQuieres respuestas de error personalizadas

En la mayoría de los casos, prefiere ShouldBind para mayor control sobre el manejo de errores.

Ejemplo 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 soportados

Gin puede enlazar datos de muchas fuentes: JSON, XML, YAML, TOML, datos de formulario (codificado en URL y multipart), cadenas de consulta, parámetros de URI y encabezados. Usa la etiqueta de struct apropiada (json, xml, yaml, form, uri, header) para mapear campos. Las reglas de validación van en la etiqueta binding y usan la sintaxis de go-playground/validator.

En esta sección