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.