0Pricing
Go Academy · Lección

Vinculación y validación de solicitudes

ShouldBindJSON, etiquetas de binding y validator

Vinculación y validación de solicitudes es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Vinculación del cuerpo de la solicitud

Gin puede vincular datos JSON, XML, de formularios y cadenas de consulta a estructuras de Go mediante la etiqueta de estructura binding y las funciones 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 frente a MustBind

ShouldBind* devuelve el error para que pueda gestionarlo. Bind* (la variante Must) escribe automáticamente una respuesta 400 y cancela la ejecución cuando se produce un error; use ShouldBind para generar respuestas de error personalizadas.

Vinculación de parámetros de consulta

Vincule los parámetros de la cadena de consulta a una estructura con 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)

Vinculación de parámetros de ruta

Vincule los parámetros de ruta a una estructura con c.ShouldBindUri:

type IDParam struct {
    ID int64 `uri:"id" binding:"required,gt=0"`
}
var p IDParam
c.ShouldBindUri(&p)

Etiquetas de validación

Gin utiliza github.com/go-playground/validator/v10. Algunas etiquetas habituales son: required, email, min, max, gte, lte, len y oneof.

Validadores personalizados

Registre una función de validación personalizada con binding.Validator.Engine():

validate := binding.Validator.Engine().(*validator.Validate)
validate.RegisterValidation("username", validateUsername)

Respuesta de error de validación

Analice los errores del validador para generar una respuesta fácil de entender, con nombres de campos y mensajes:

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

Archivos de formularios multipart

Gestione las cargas de archivos con c.FormFile:

file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./uploads/"+file.Filename)

Negociación de Content-Type

ShouldBind de Gin selecciona automáticamente la vinculación según Content-Type (JSON para application/json y formulario para application/x-www-form-urlencoded).

Tamaño máximo del cuerpo de la solicitud

Limite el tamaño del cuerpo de la solicitud para evitar el agotamiento de la memoria:

r.MaxMultipartMemory = 8 << 20 // 8 MiB for multipart

Validación de estructuras anidadas

La validación se ejecuta de forma recursiva en las estructuras anidadas. Use dive para validar los elementos de un slice:

Tags []string `json:"tags" binding:"required,dive,min=1,max=30"`

Comprobación rápida

¿Cuál es la diferencia entre c.ShouldBindJSON y c.BindJSON en Gin?

Recapitulación: vinculación de solicitudes

Puntos clave:

  • ShouldBindJSON/ShouldBindQuery/ShouldBindUri para la vinculación con tipos
  • Etiquetas binding:"required,email,gte=0" mediante go-playground/validator
  • Validadores personalizados mediante binding.Validator.Engine()
  • Analice ValidationErrors para obtener mensajes de error a nivel de campo

Preguntas frecuentes

¿La lección «Vinculación y validación de solicitudes» es gratis?

Sí — el texto completo de «Vinculación y validación de solicitudes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Vinculación y validación de solicitudes»?

ShouldBindJSON, etiquetas de binding y validator Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Vinculación y validación de solicitudes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Router Gin y grupos de rutas
  2. Vinculación y validación de solicitudes
  3. Helpers de respuesta y códigos de estado
  4. Middleware de Gin: autenticación y registro
← Volver a Go Academy