Validator para Go: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Librería validator para Go: guía completa

1. ¿Qué es y para qué sirve?

La librería validator (nombre completo del paquete: github.com/go-playground/validator/v10) es una herramienta potente y flexible para validar estructuras y campos individuales en el lenguaje Go. Permite describir reglas de validación de forma declarativa directamente en las etiquetas de las estructuras, lo que hace que el código sea limpio, legible y fácil de mantener. En lugar de escribir decenas de líneas de validaciones manuales (if-else, switch), simplemente añades etiquetas a los campos y la librería hace todo el trabajo por ti.

¿Para qué sirve? En cualquier aplicación web, API o servicio que maneje entrada de usuario, es fundamental validar los datos antes de procesarlos. Un email incorrecto, un nombre vacío, una edad negativa o una contraseña demasiado larga pueden provocar errores en la lógica, vulnerabilidades (SQL-injection, XSS) o incluso la caída del servidor. validator resuelve este problema de forma elegante: defines las reglas una vez y luego llamas a una sola función Validate.Struct(), que verifica todos los campos automáticamente.

La librería incluye decenas de validadores integrados (required, min, max, email, url, uuid, oneof, len y muchos más), y también permite crear validadores personalizados. Se usa activamente en producción, tiene un rendimiento excelente (gracias al almacenamiento en caché de reflexión) y es compatible con frameworks populares como Gin, Echo y Fiber. Si programas en Go y quieres evitar código repetitivo, esta librería es imprescindible.

2. Instalación

La instalación de la librería se realiza de forma estándar mediante go get. Asegúrate de tener instalado Go versión 1.18 o superior (se recomienda 1.21+).

go get github.com/go-playground/validator/v10

Después de ejecutar el comando, el paquete se añadirá a tu archivo go.mod. Impórtalo en tu código:

import "github.com/go-playground/validator/v10"

3. Inicio rápido — ejemplo mínimo funcional

Vamos a crear una estructura simple de usuario y validar sus campos. Este es un ejemplo mínimo que muestra la idea principal.

package main

import (
    "fmt"
    "github.com/go-playground/validator/v10"
)

// User — estructura con etiquetas de validación
type User struct {
    Name  string `validate:"required,min=2,max=50"`
    Email string `validate:"required,email"`
    Age   int    `validate:"gte=0,lte=150"`
}

func main() {
    // Creamos una instancia del validador
    validate := validator.New()

    // Datos de prueba
    user := User{
        Name:  "A",               // Nombre demasiado corto
        Email: "invalid-email",   // Email no válido
        Age:   -5,                // Edad negativa
    }

    // Ejecutamos la validación
    err := validate.Struct(user)
    if err != nil {
        // Recorremos todos los errores
        for _, err := range err.(validator.ValidationErrors) {
            fmt.Printf("Campo: %s, Error: %s, Valor: %v\n",
                err.Field(), err.Tag(), err.Value())
        }
    } else {
        fmt.Println("¡Validación exitosa!")
    }
}

Salida del programa:

Campo: Name, Error: min, Valor: A
Campo: Email, Error: email, Valor: invalid-email
Campo: Age, Error: gte, Valor: -5

Como puedes ver, la librería detecta automáticamente todas las infracciones y devuelve información estructurada sobre cada error.

4. Métodos y funciones principales

A continuación se presentan 8 métodos y funciones clave de la librería. Para cada uno se indica la firma, descripción y un ejemplo funcional.

4.1. validator.New()

Firma: func New() *Validate

Qué hace: Crea una nueva instancia del validador. Este es el objeto principal a través del cual se realizan todas las validaciones. Se recomienda crear una sola instancia para toda la aplicación.

Recommendations