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.
- 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.
Instale o pacote usando:
go get github.com/Marlliton/validator
Veja um exemplo de como criar e validar uma struct usando o pacote:
package main
import (
"fmt"
"github.com/Marlliton/validator"
"github.com/Marlliton/validator/fail"
"github.com/Marlliton/validator/rule"
)
type User struct {
Name string
Email string
Age int
}
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)
if len(errs) == 0 {
return true, nil
}
return false, errs
}
func main() {
user := User{Name: "Jo", Email: "invalid_email", Age: 15}
if ok, errs := user.Validate(); !ok {
fmt.Println("Erros de validação:")
for _, err := range errs {
fmt.Println(err.Message)
}
} else {
fmt.Println("Tudo válido!")
}
}
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.
Crie suas próprias validações passando uma função personalizada como regra:
v.Add("CustomField", rule.Rules{
func(fieldName string, value interface{}) *fail.Error {
if value.(int)%2 != 0 {
return fail.New(fieldName, "O número deve ser par")
}
return nil
},
})
- Exemplos de uso disponíveis no diretório
examples
.
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.
- 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
- Resolver bug na regra Required com o valor zero (0)
Este projeto é distribuído sob a licença MIT.