0Pricing
Go Academy · Lezione

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 multipart

Convalida 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

  1. Router Gin e gruppi di route
  2. Binding e validazione delle richieste
  3. Helper per le risposte e codici di stato
  4. Middleware Gin: autenticazione e logging
← Torna a Go Academy