Datenvalidierung in Go: Überblick über Bibliotheken und Ansätze

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenvalidierung in Go (Golang): Bibliotheken und praktische Beispiele



Datenvalidierung ist einer der Schlüsselaspekte bei der Entwicklung zuverlässiger Webanwendungen und APIs in Go. Ohne korrekte Prüfung der eingehenden Daten wird die Anwendung anfällig für Fehler, fehlerhafte Eingaben und Angriffe. In diesem Artikel betrachten wir drei beliebte Bibliotheken zur Validierung in Go: go-playground/validator, ozzo-validation und govalidator, und analysieren Beispiele für deren Verwendung.



Warum ist Validierung in Go notwendig?

Go ist eine streng typisierte Sprache, aber das schützt nicht vor logischen Fehlern in den Daten: leere Zeichenketten, ungültige E-Mails, Zahlen außerhalb des zulässigen Bereichs. Validierung ermöglicht:

  • Sicherstellung der Datenintegrität am Eingang;
  • Vereinfachung der Fehlerbehandlung;
  • Erhöhung der Anwendungssicherheit;
  • Reduzierung von Boilerplate-Code.


1. go-playground/validator — der Goldstandard

Die beliebteste Bibliothek (über 15k Sterne auf GitHub). Ermöglicht die Beschreibung von Validierungsregeln direkt in den Tags von Strukturen.



Installation

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


Basisbeispiel

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("Feld: %s, Fehler: %s", err.Field(), err.Tag()) } }}


Benutzerdefinierte Validatoren

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ät und Lesbarkeit

Die Bibliothek ozzo-validation bietet eine Fluent-Schnittstelle zum Erstellen von Regeln. Sie eignet sich gut für komplexe Geschäftsregeln.



Installation

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


Anwendungsbeispiel

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) }}


Besonderheiten

  • Keine Tags — Regeln werden im Code geschrieben;
  • Einfache Integration mit benutzerdefinierten Typen;
  • Unterstützung für bedingte Validierung.


3. govalidator — Einfachheit für kleine Projekte

Eine leichtgewichtige Bibliothek mit einer Reihe vorgefertigter Funktionen zur Prüfung von Zeichenketten, Zahlen und Strukturen.



Installation

go get github.com/asaskevich/govalidator


Beispiel

package main

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

func main() { // Zeichenkettenprüfung fmt.Println(govalidator.IsEmail("test@example.com")) // true fmt.Println(govalidator.IsURL("https://pythonlib.ru")) // true fmt.Println(govalid

Empfehlungen