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 multipartValidierung 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
- Gin-Router und Routengruppen
- Request-Binding und Validierung
- Antwort-Hilfsfunktionen und Statuscodes
- Gin-Middleware: Authentifizierung und Logging