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/v10Basisbeispiel
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/v4Anwendungsbeispiel
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/govalidatorBeispiel
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 Auch in der Bibliothek
better-sqlite3-typescript für TypeScript: Komplettguide mit Beispielen
Arbeiten mit XML in C# (.NET): Vollständige Anleitung
Elasticsearch-Client für Kotlin: Integration, Beispiele und Möglichkeiten
Bildverarbeitung in Java: Bibliotheken und Codebeispiele
Überwachung von Swift-Apps: Bibliotheken und Tools für iOS/macOS