Validator para Go: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca validator para Go: guia completo

1. O que é e para que serve

A biblioteca validator (nome completo do pacote — github.com/go-playground/validator/v10) é uma ferramenta poderosa e flexível para validação de structs e campos individuais na linguagem Go. Ela permite descrever regras de validação de forma declarativa diretamente nas tags das structs, tornando o código limpo, legível e fácil de manter. Em vez de escrever dezenas de linhas de verificações manuais (if-else, switch), basta adicionar tags aos campos, e a biblioteca faz todo o trabalho para você.

Para que serve? Em qualquer aplicação web, API ou serviço que lida com entrada de dados do usuário, é fundamental validar os dados antes de processá-los. Um email inválido, nome vazio, idade negativa, senha muito longa — tudo isso pode causar erros de lógica, vulnerabilidades (SQL injection, XSS) ou queda do servidor. O validator resolve esse problema de forma elegante: você define as regras uma vez e depois chama a função Validate.Struct(), que verifica todos os campos automaticamente.

A biblioteca oferece dezenas de validadores embutidos (required, min, max, email, url, uuid, oneof, len e muitos outros), além de permitir a criação de validadores personalizados. É amplamente utilizada em produção, possui excelente desempenho (graças ao cache de reflexão) e é compatível com frameworks populares como Gin, Echo e Fiber. Se você programa em Go e quer evitar código repetitivo, esta biblioteca é indispensável.

2. Instalação

A instalação da biblioteca é feita da forma padrão com go get. Certifique-se de ter o Go versão 1.18 ou superior (recomendado 1.21+).

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

Após executar o comando, o pacote será adicionado ao seu go.mod. Importe-o no código:

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

3. Início rápido — exemplo mínimo funcional

Vamos criar uma estrutura simples de usuário e validar seus campos. Este é um exemplo mínimo que demonstra a ideia principal.

package main

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

// User — struct com tags de validação
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() {
    // Cria uma instância do validador
    validate := validator.New()

    // Dados de teste
    user := User{
        Name:  "A",               // Nome muito curto
        Email: "email-invalido",  // Email inválido
        Age:   -5,                // Idade negativa
    }

    // Executa a validação
    err := validate.Struct(user)
    if err != nil {
        // Percorre todos os erros
        for _, err := range err.(validator.ValidationErrors) {
            fmt.Printf("Campo: %s, Erro: %s, Valor: %v\n",
                err.Field(), err.Tag(), err.Value())
        }
    } else {
        fmt.Println("Validação concluída com sucesso!")
    }
}

Saída do programa:

Campo: Name, Erro: min, Valor: A
Campo: Email, Erro: email, Valor: email-invalido
Campo: Age, Erro: gte, Valor: -5

Como você pode ver, a biblioteca encontra automaticamente todas as violações e retorna informações estruturadas sobre cada erro.

4. Principais métodos e funções

Abaixo estão 8 métodos e funções essenciais da biblioteca. Para cada um, são fornecidos a assinatura, descrição e um exemplo prático.

4.1. validator.New()

Assinatura: func New() *Validate

O que faz: Cria uma nova instância do validador. Este é o objeto principal através do qual todas as validações são executadas. Recomenda-se criar uma única instância para toda a aplicação.

Recommendations