Binding e validazione delle richieste
ShouldBindJSON, tag di binding e validator
Binding e validazione delle richieste è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Binding del corpo della richiesta
Gin può associare JSON, XML, dati dei form e stringhe di query a struct Go utilizzando il tag di struct binding e le funzioni c.ShouldBind*:
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 rispetto a MustBind
ShouldBind* restituisce l'errore, consentendole di gestirlo. Bind* (variante Must) scrive automaticamente una risposta 400 e interrompe l'elaborazione in caso di errore: utilizzi ShouldBind per risposte di errore personalizzate.
Binding dei parametri di query
Associ i parametri della stringa di query a una struct con 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)Binding dei parametri del percorso
Associ i parametri del percorso a una struct con c.ShouldBindUri:
type IDParam struct {
ID int64 `uri:"id" binding:"required,gt=0"`
}
var p IDParam
c.ShouldBindUri(&p)Tag di convalida
Gin utilizza github.com/go-playground/validator/v10. Tag comuni: required, email, min, max, gte, lte, len, oneof.
Validatori personalizzati
Registri una funzione di convalida personalizzata con binding.Validator.Engine():
validate := binding.Validator.Engine().(*validator.Validate)
validate.RegisterValidation("username", validateUsername)Risposta agli errori di convalida
Analizzi gli errori del validator per creare una risposta chiara per l'utente, con nomi dei campi e messaggi:
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})
}File dei form multipart
Gestisca i caricamenti di file con c.FormFile:
file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./uploads/"+file.Filename)Negoziazione del Content-Type
ShouldBind di Gin sceglie automaticamente il binding in base al Content-Type (JSON per application/json, form per application/x-www-form-urlencoded).
Dimensione massima del corpo della richiesta
Limiti la dimensione del corpo della richiesta per evitare l'esaurimento della memoria:
r.MaxMultipartMemory = 8 << 20 // 8 MiB for multipartConvalida delle struct annidate
La convalida viene eseguita ricorsivamente sulle struct annidate. Utilizzi dive per convalidare gli elementi di una slice:
Tags []string `json:"tags" binding:"required,dive,min=1,max=30"`Verifica rapida
Qual è la differenza tra c.ShouldBindJSON e c.BindJSON in Gin?
Riepilogo: binding delle richieste
Punti chiave:
- ShouldBindJSON/ShouldBindQuery/ShouldBindUri per il binding tipizzato
- Tag binding:"required,email,gte=0" tramite go-playground/validator
- Validatori personalizzati tramite binding.Validator.Engine()
- Analizzi ValidationErrors per ottenere messaggi di errore a livello di campo
Domande Frequenti
La lezione «Binding e validazione delle richieste» è gratuita?
Sì — il testo completo di «Binding e validazione delle richieste» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Binding e validazione delle richieste»?
ShouldBindJSON, tag di binding e validator Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Binding e validazione delle richieste»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Router Gin e gruppi di route
- Binding e validazione delle richieste
- Helper per le risposte e codici di stato
- Middleware Gin: autenticazione e logging