Go Gin: Erstellen Sie einen generischen benutzerdefinierten Validator

WBOY
Freigeben: 2024-02-10 12:51:09
nach vorne
425 Leute haben es durchsucht

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
}
....
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
        }
    }
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage