Go-Strukturen mit Govalidator validieren

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?

Github-Vorschau für das 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.

Fehlerausgabe

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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert