Skip to content

Repository files navigation

Validator

Uma biblioteca de validação para structs no Go, que utiliza regras definidas programaticamente, sem a necessidade de tags. Este pacote é ideal para quem busca flexibilidade e reutilização de lógica de validação em diversos contextos de uma aplicação.

📋 Funcionalidades

  • Validação baseada em regras programáticas (sem tags).
  • Suporte a validações customizadas.
  • Mensagens de erro associadas aos campos.
  • Compatível com projetos complexos e escaláveis.

🛠️ Instalação

Instale o pacote usando:

go get github.com/Marlliton/validator

🚀 Uso Básico

Veja um exemplo de como criar e validar uma struct usando o pacote:

Definição e Validação

package main
import (
"fmt""github.com/Marlliton/validator""github.com/Marlliton/validator/fail""github.com/Marlliton/validator/rule"
)
typeUserstruct {
NamestringEmailstringAgeint
}
func (u*User) Validate() (bool, []*fail.Error) {
v:=validator.New()
v.Add("Name", rule.Rules{
rule.Required(),
rule.MinLength(3),
rule.MaxLength(50),
})
v.Add("Email", rule.Rules{
rule.Required(),
rule.ValidEmail(),
})
v.Add("Age", rule.Rules{
rule.MinValue(18),
})
errs:=v.Validate(*u)
iflen(errs) ==0 {
returntrue, nil
}
returnfalse, errs
}
funcmain() {
user:=User{Name: "Jo", Email: "invalid_email", Age: 15}
ifok, errs:=user.Validate(); !ok {
fmt.Println("Erros de validação:")
for_, err:=rangeerrs {
fmt.Println(err.Message)
}
} else {
fmt.Println("Tudo válido!")
}
}

Regras de Validação Suportadas

O pacote oferece uma variedade de regras que podem ser aplicadas aos campos. Exemplos:

  • rule.Required(): O campo é obrigatório.
  • rule.MinLength(n): Comprimento mínimo.
  • rule.MaxLength(n): Comprimento máximo.
  • rule.ExactLength(n): Comprimento exatamente igual a "n".
  • rule.ValidURL(): Valida uma URL.
  • rule.ValidEmail(): Valida um email.
  • rule.ValidPhoneNumber(): Valida um telefone no formato e164.
  • rule.String(n): Verifica se é uma string.
  • rule.Int(n): Verifica se é um inteiro.
  • rule.Bool(n): Verifica se é um bool.
  • rule.MinValue(n): Valor mínimo permitido.
  • rule.MaxValue(n): Valor máximo permitido.

Você pode combinar essas regras em diferentes campos.

Validações Personalizadas

Crie suas próprias validações passando uma função personalizada como regra:

v.Add("CustomField", rule.Rules{
func(fieldNamestring, valueinterface{}) *fail.Error {
ifvalue.(int)%2!=0 {
returnfail.New(fieldName, "O número deve ser par")
}
returnnil
},
})

📚 Exemplos

  • Exemplos de uso disponíveis no diretório examples.

🛡️ Contribuindo

Contribuições são bem-vindas! Abra um issue para relatar problemas ou envie um pull request com melhorias. Certifique-se de seguir as diretrizes no arquivo CONTRIBUTING.md.

🗹 Itens a Fazer

  • Permitir que o usuário forneça sua próprias mensagens customizadas
  • Validar uma URL
  • Checar o tipo:
    • string
    • number
      • bool
      • float
  • Adicionar método in para validar se um dado esté presente em um slice (includes)
  • Resolver bug na regra Required com o valor zero (0)

📄 Licença

Este projeto é distribuído sob a licença MIT.

About

Uma biblioteca de validação para structs no Go, que utiliza regras definidas programaticamente, sem a necessidade de tags.

Topics

Resources

Contributing

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages