Validation des données en Go : aperçu des bibliothèques et approches

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Validation des données en Go (Golang) : bibliothèques et exemples pratiques



La validation des données est l’un des aspects clés du développement d’applications web et d’API fiables en Go. Sans une vérification correcte des données entrantes, l’application devient vulnérable aux erreurs, aux saisies incorrectes et aux attaques. Dans cet article, nous examinerons trois bibliothèques populaires pour la validation en Go : go-playground/validator, ozzo-validation et govalidator, et nous analyserons des exemples de leur utilisation.



Pourquoi la validation est-elle nécessaire en Go ?

Go est un langage fortement typé, mais cela ne protège pas des erreurs logiques dans les données : chaînes vides, emails incorrects, nombres hors plage autorisée. La validation permet :

  • De garantir l’intégrité des données à l’entrée ;
  • De simplifier la gestion des erreurs ;
  • D’améliorer la sécurité de l’application ;
  • De réduire la quantité de code boilerplate.


1. go-playground/validator — le standard de référence

La bibliothèque la plus populaire (plus de 15k étoiles sur GitHub). Elle permet de décrire les règles de validation directement dans les tags des structures.



Installation

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


Exemple de base

package main

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

type User struct { Name string `validate:"required,min=3,max=50"` Email string `validate:"required,email"` Age int `validate:"gte=18,lte=120"`}

func main() { validate := validator.New() user := User{ Name: "A", Email: "invalid-email", Age: 15, } err := validate.Struct(user) if err != nil { for _, err := range err.(validator.ValidationErrors) { fmt.Printf("Champ : %s, Erreur : %s", err.Field(), err.Tag()) } }}


Validateurs personnalisés

validate.RegisterValidation("is-valid-username", func(fl validator.FieldLevel) bool {    return len(fl.Field().String()) >= 5})

type Login struct { Username string `validate:"required,is-valid-username"`}


2. ozzo-validation — flexibilité et lisibilité

La bibliothèque ozzo-validation propose une interface fluide pour construire des règles. Elle convient bien aux règles métier complexes.



Installation

go get github.com/go-ozzo/ozzo-validation/v4


Exemple d’utilisation

package main

import ( "fmt" validation "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is")

type Order struct { ProductID string Quantity int Email string}

func (o Order) Validate() error { return validation.ValidateStruct(&o, validation.Field(&o.ProductID, validation.Required, validation.Length(5, 20)), validation.Field(&o.Quantity, validation.Required, validation.Min(1), validation.Max(100)), validation.Field(&o.Email, validation.Required, is.Email), )}

func main() { order := Order{ProductID: "AB", Quantity: 0, Email: "bad"} err := order.Validate() if err != nil { fmt.Println(err) }}


Caractéristiques

  • Absence de tags — les règles sont écrites dans le code ;
  • Intégration facile avec les types personnalisés ;
  • Prise en charge de la validation conditionnelle.


3. govalidator — simplicité pour les petits projets

Bibliothèque légère avec un ensemble de fonctions prêtes à l’emploi pour vérifier les chaînes, les nombres et les structures.



Installation

go get github.com/asaskevich/govalidator


Exemple

package main

import ( "fmt" "github.com/asaskevich/govalidator")

func main() { // Vérification de chaînes fmt.Println(govalidator.IsEmail("test@example.com")) // true fmt.Println(govalidator.IsURL("https://pythonlib.ru")) // true fmt.Println(govalid

Recommendations