Heim  >  Artikel  >  Backend-Entwicklung  >  Go Gin: Erstellen Sie einen generischen benutzerdefinierten Validator

Go Gin: Erstellen Sie einen generischen benutzerdefinierten Validator

WBOY
WBOYnach vorne
2024-02-10 12:51:09386Durchsuche

Go Gin:创建通用自定义验证器

php-Editor Yuzai bietet Ihnen ein praktisches Entwicklungstool – einen universellen benutzerdefinierten Validator im Go Gin-Framework. Als leistungsstarkes Web-Framework bietet Go Gin eine leistungsstarke Validierungsfunktion, um Entwicklern dabei zu helfen, die Rechtmäßigkeit und Integrität von Daten bei der Verarbeitung von Benutzereingaben sicherzustellen. Universelle benutzerdefinierte Validatoren können verschiedene Validierungsregeln an die Entwicklungsanforderungen anpassen, den Code-Schreibprozess vereinfachen und die Entwicklungseffizienz verbessern. In diesem Artikel wird detailliert beschrieben, wie ein universeller benutzerdefinierter Validator erstellt wird, und seine Verwendung sowie Vorsichtsmaßnahmen werden erläutert. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, Sie werden enorm davon profitieren. Lassen Sie uns die universellen benutzerdefinierten Validatoren im Go Gin-Framework erkunden!

Frageninhalt

Ich verwende Go Gin, um eine API in meinem Projekt zu erstellen. Ich musste einen benutzerdefinierten Validator erstellen, also habe ich so etwas erstellt:

var valueone validator.func = func(fl validator.fieldlevel) bool {
    value, ok := fl.field()
    if ok {
        if value != "one" {
                  return true
                }
    }
    return true
}

var valuetwo validator.func = func(fl validator.fieldlevel) bool {
    value, ok := fl.field()
    if ok {
        if value != "two" {
                  return true
                }
    }
    return true
}
....

Gibt es eine Möglichkeit, einen einzelnen Validator zu erstellen, der allgemeiner ist und in beiden Fällen verwendet werden kann, anstatt fast denselben benutzerdefinierten Validator mehrmals zu erstellen, wie zum Beispiel:

var value validator.Func = func(fl validator.FieldLevel, param) bool {
    value, ok := fl.Field()
    if ok {
        if value != param {
                  return true
                }
    }
    return true
}

Ich kann keine Möglichkeit finden, Parameter an benutzerdefinierte Validatoren in Gin zu übergeben oder eine andere Möglichkeit, diese generischen Validatoren zu erstellen. Ich muss Tausende nahezu ähnlicher Validatoren erstellen, möchte aber nicht für jeden Validator benutzerdefinierte Validatoren erstellen.

Problemumgehung

Sie können die Funktionsstruktur nicht ändern, da sie im Paket so definiert ist.

// func accepts a fieldlevel interface for all validation needs. the return
// value should be true when validation succeeds.

type func func(fl fieldlevel) bool

Stattdessen können wir benutzerdefinierte Validierungs-Tags mithilfe von Parametern ausprobieren

Siehe Beispiel unten

package main

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

type Data struct {
    One string `json:"one" validate:"custom_validation=one"`
    Two string `json:"two" validate:"custom_validation=two"`
}

var validate *validator.Validate

func main() {
    validate = validator.New()

    err := validate.RegisterValidation("custom_validation", func(fl validator.FieldLevel) bool {
        value := fl.Field()
        param := fl.Param()

        return value.String() == param
    })

    if err != nil {
        panic(err)
    }

    // this will succeed
    {
        data := &Data{
            One: "one",
            Two: "two",
        }

        err = validate.Struct(data)
        if err != nil {
            panic(err)
        }
    }

    // it will fail here
    {
        data := &Data{
            Two: "one",
            One: "two",
        }

        err = validate.Struct(data)
        if err != nil {
            panic(err)
        }
    }
}

Weitere Beispiele hier

Hinweis: Golang unterstützt

!== nicht

Das obige ist der detaillierte Inhalt vonGo Gin: Erstellen Sie einen generischen benutzerdefinierten Validator. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen