0Pricing
Go Academy · Lektion

Request-Binding und Validierung

ShouldBindJSON, Binding-Tags und Validator

Request-Binding und Validierung ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Anfrage-Body binden

Gin kann JSON, XML, Formulardaten und Abfragezeichenfolgen mithilfe des Struct-Tags binding und der Funktionen c.ShouldBind* an Go-Structs binden:

type CreateUserRequest struct {
    Name  string `json:"name"  binding:"required"`
    Email string `json:"email" binding:"required,email"`
    Age   int    `json:"age"   binding:"gte=0,lte=150"`
}

func createUser(c *gin.Context) {
    var req CreateUserRequest
    if err := c.ShouldBindJSON(&req); err != nil {
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
}

ShouldBind im Vergleich zu MustBind

ShouldBind* gibt den Fehler zurück, damit Sie ihn selbst behandeln können. Bind* (die Must-Variante) schreibt bei einem Fehler automatisch eine 400-Antwort und bricht die Verarbeitung ab – verwenden Sie ShouldBind für benutzerdefinierte Fehlerantworten.

Abfragebindung

Binden Sie Abfragezeichenfolgen an ein Struct mit c.ShouldBindQuery:

type ListRequest struct {
    Page  int `form:"page"  binding:"gte=1"`
    Limit int `form:"limit" binding:"gte=1,lte=100"`
}
var q ListRequest
c.ShouldBindQuery(&q)

Pfadparameterbindung

Binden Sie Pfadparameter mit c.ShouldBindUri an ein Struct:

type IDParam struct {
    ID int64 `uri:"id" binding:"required,gt=0"`
}
var p IDParam
c.ShouldBindUri(&p)

Validierungs-Tags

Gin verwendet github.com/go-playground/validator/v10. Häufige Tags sind: required, email, min, max, gte, lte, len, oneof.

Benutzerdefinierte Validatoren

Registrieren Sie eine benutzerdefinierte Validierungsfunktion mit binding.Validator.Engine():

validate := binding.Validator.Engine().(*validator.Validate)
validate.RegisterValidation("username", validateUsername)

Antwort auf Validierungsfehler

Wandeln Sie Validatorfehler mit Feldnamen und Meldungen in eine verständliche Antwort für Benutzer um:

var ve validator.ValidationErrors
if errors.As(err, &ve) {
    errs := make([]string, len(ve))
    for i, e := range ve {
        errs[i] = fmt.Sprintf("%s: %s", e.Field(), e.Tag())
    }
    c.JSON(400, gin.H{"errors": errs})
}

Dateien in Multipart-Formularen

Behandeln Sie Datei-Uploads mit c.FormFile:

file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./uploads/"+file.Filename)

Aushandlung des Content-Types

ShouldBind wählt die Bindung automatisch anhand des Content-Types aus (JSON für application/json, Formular für application/x-www-form-urlencoded).

Maximale Größe des Anfrage-Bodys

Begrenzen Sie die Größe des Anfrage-Bodys, um eine Erschöpfung des Arbeitsspeichers zu verhindern:

r.MaxMultipartMemory = 8 << 20 // 8 MiB for multipart

Validierung verschachtelter Structs

Die Validierung wird rekursiv auf verschachtelte Structs angewendet. Verwenden Sie dive, um Elemente von Slices zu validieren:

Tags []string `json:"tags" binding:"required,dive,min=1,max=30"`

Kurze Überprüfung

Was ist in Gin der Unterschied zwischen c.ShouldBindJSON und c.BindJSON?

Zusammenfassung: Request-Binding

Wichtige Punkte:

  • ShouldBindJSON/ShouldBindQuery/ShouldBindUri für typisiertes Binding
  • binding:"required,email,gte=0"-Tags über go-playground/validator
  • Benutzerdefinierte Validatoren über binding.Validator.Engine()
  • Verarbeiten Sie ValidationErrors für feldbezogene Fehlermeldungen

Häufig gestellte Fragen

Ist die Lektion „Request-Binding und Validierung“ kostenlos?

Ja — der vollständige Text von „Request-Binding und Validierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Request-Binding und Validierung“?

ShouldBindJSON, Binding-Tags und Validator Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Request-Binding und Validierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Gin-Router und Routengruppen
  2. Request-Binding und Validierung
  3. Antwort-Hilfsfunktionen und Statuscodes
  4. Gin-Middleware: Authentifizierung und Logging
← Zurück zu Go Academy