Go-Strukturen mit Govalidator validieren
Strukturen sind einer der wichtigsten und am häufigsten verwendeten Datentypen, die in der Programmiersprache Go bereitgestellt werden. Viele Pakete mit verschiedenen Funktionalitäten, von Datenbankpaketen bis hin zu ORMs, und einige Web-Frameworks verwenden Strukturen für eine einfache Datenanalyse und andere Operationen.
Die Struct-Validierung ist eine häufige Aufgabe in Go, und das Go-Validator-Paket bietet eine einfache und effiziente Möglichkeit, Structs in Ihren Projekten zu validieren.
Was ist das Go-Validator-Paket?
Das Go-Validatorpaket implementiert Wertvalidierungen für Struct- und einzelne Felder basierend auf angegebenen Tags in der Struct-Deklaration.
Das Go-Validator-Paket bietet Funktionen für die feldübergreifende und strukturübergreifende Validierung mit Tags, Slice, Array und Map Diving, die Ebenen der multidimensionalen Feldvalidierung, benutzerdefinierte Feldvalidierung, Extraktion benutzerdefinierter Feldnamen, anpassbare Fehlermeldungen und mehr ermöglichen Unterstützung für das beliebte Gin-Framework als Standardvalidator für das Paket.
Führen Sie einen dieser Befehle im Terminal Ihres Arbeitsverzeichnisses aus, um das Validierungspaket zu installieren .
go get gopkg.in/go-playground/validator.v9
go get github.com/go-playground/validator/v10
Die Versionen sind das Suffix der URL. Der erste Befehl installiert Version 9 und der zweite installiert Version 10 des Pakets.
Nach der Installation des Pakets können Sie das Paket je nach installierter Version in Ihre Projekte importieren.
import (
"gopkg.in/go-playground/validator.v9"
)
Sie können jetzt mit der Verwendung des Go-Validatorpakets fortfahren. Wenn es Probleme mit Ihrer Installation gibt, versuchen Sie eine Neuinstallation/ein Upgrade auf die neueste Go-Version.
Validieren von Strukturen mit dem Validator-Paket
Sie müssen eine Instanz der validator.Validate -Struktur erstellen und die zu validierende Struktur mithilfe von Validierungs-Tags definieren, um die Validierungsregeln für die Felder anzugeben.
So können Sie eine Instanz der validator.Validate -Struktur erstellen .
func main() {
validate: = validator.New()
}
Sie können eine Struktur definieren, die Sie validieren möchten, indem Sie Tags für die Felder angeben und so Validierungsregeln festlegen. Validierungs-Tags sind spezielle Anmerkungen von Strukturfelddefinitionen, die die Regeln spezifizieren.
Hier ist eine reguläre Struktur zur Validierung.
type User struct {
Name string
Age int
Email string
}
Hier ist ein Beispiel für die Struktur, bereit zur Validierung.
type User struct {
Name string `validate:"required"`
Age int `validate:"gte=0,lte=130"`
Email string `validate:"required,email"`
}
In diesem Beispiel haben Sie das Feld „ Name “ bei der Instanziierung als erforderlich angegeben, das Feld „ Alter “ muss größer oder gleich 0 und kleiner oder gleich 130 sein, und das Feld „E- Mail “ ist erforderlich und muss bei der Instanziierung eine gültige E-Mail-Adresse sein.
Im Go-Validator-Paket sind verschiedene Validierungs-Tags verfügbar, darunter Tags für erforderliche Felder, Mindest- und Höchstwerte und reguläre Ausdrücke. Eine vollständige Liste der verfügbaren Validierungs-Tags finden Sie in der Dokumentation zum Go-Validator-Paket.
Nachdem Sie die zu validierende Struktur definiert und die Validierungsregeln für jedes Feld festgelegt haben, können Sie die Struct- Methode der validator.Validate -Struktur verwenden , um die Struktur zu validieren.
user: = User{
// Name not instantiated
Age: 3990000,
Email: "john@example.com",
}
// note that the Name and Age fields fail the validation
err: = validate.Struct(user)
if err! = nil {
// Struct is invalid
}
Die Struct- Methode gibt einen Fehler zurück, wenn Validierungsfehler vorhanden sind, und Sie können den Fehler basierend auf Ihrer Operation behandeln.
Sie können auf diese Fehler zugreifen, indem Sie die ValidationErrors- Methode des Fehlers verwenden.
if err! = nil {
for _, err: = range err.(validator.ValidationErrors) {
fmt.Println(err.Field(), err.Tag())
}
}
Die ValidationErrors -Methode gibt den Namen jedes Felds mit einem Validierungsfehler und das Validierungs-Tag zurück, das den Fehler verursacht hat.
Benutzerdefinierte Validierungs-Tags definieren
Sie können auch benutzerdefinierte Validierungs-Tags definieren, wenn bestimmte Validierungsanforderungen nicht Teil der integrierten Tags sind.
Sie können die RegisterValidation – Methode der validator.Validate -Struktur verwenden . Die RegisterValidation- Methode akzeptiert zwei Argumente; der Name des Validierungs-Tags und eine Validierungsfunktion. Die Validierungsfunktion ist eine Rückruffunktion, die für jedes Feld mit dem benutzerdefinierten Validierungs-Tag aufgerufen wird, und die Funktion muss „ true “ zurückgeben, wenn das Feld gültig ist, und „ false “ andernfalls.
Hier ist eine Beispieldefinition eines benutzerdefinierten Validierungs-Tags. Das Tag validiert Felder auf gerade Zahlen.
validate.RegisterValidation("even", func(fl validator.FieldLevel) bool {
// Try to get the field value as an int
value, ok: = fl.Field().Interface().(int)
if! ok {
// If the field value is not an int, return false
return false
}
// Return true if the value is even, false, otherwise
return value % 2 == 0
})
Der Code definiert ein benutzerdefiniertes Validierungstag, sogar unter Verwendung der RegisterValidation – Methode der validator.Validate – Struktur. Sie haben das Validierungstag mit einer Funktion definiert, die ein einzelnes Argument vom Typ validator.FieldLevel akzeptiert.
Sie können jetzt das benutzerdefinierte Validierungs-Tag in Strukturdefinitionen genauso verwenden wie für integrierte Validierungs-Tags.
type MyStruct struct {
Value int `validate:"even"`
}
Es gibt mehr zu gehen Structs
Structs sind erstklassige Bürger in Go, und es gibt so viel, was man mit Structs machen kann. Wenn Sie mit rein objektorientierten Sprachen vertraut sind, können Sie Go-Strukturen verwenden, um mit Daten wie mit Klassen zu arbeiten.
Schreibe einen Kommentar