0Pricing
Go Academy · Aula

Vinculação e validação de requisições

ShouldBindJSON, tags de vinculação e validator

Vinculação e validação de requisições é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

Vinculação do corpo da requisição

O Gin pode vincular JSON, XML, dados de formulário e strings de consulta a estruturas Go usando a anotação de estrutura binding e as funções 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 em comparação com MustBind

ShouldBind* retorna o erro para que você o trate. Bind* (variante Must) grava automaticamente uma resposta 400 e interrompe a execução quando ocorre um erro; utilize ShouldBind para respostas de erro personalizadas.

Vinculação de parâmetros de consulta

Vincule os parâmetros da string de consulta a uma estrutura com 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)

Vinculação de parâmetros de caminho

Vincule os parâmetros de caminho a uma estrutura com c.ShouldBindUri:

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

Anotações de validação

O Gin utiliza github.com/go-playground/validator/v10. Anotações comuns: required, email, min, max, gte, lte, len, oneof.

Validadores personalizados

Registre uma função de validação personalizada com binding.Validator.Engine():

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

Resposta de erro de validação

Analise os erros do validador em uma resposta fácil de entender, com nomes de campos e mensagens:

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})
}

Arquivos de formulário multipart

Trate o envio de arquivos com c.FormFile:

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

Negociação de Content-Type

O ShouldBind do Gin escolhe automaticamente a vinculação com base no Content-Type (JSON para application/json e formulário para application/x-www-form-urlencoded).

Tamanho máximo do corpo da requisição

Limite o tamanho do corpo da requisição para evitar o esgotamento de memória:

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

Validação de estruturas aninhadas

A validação é executada recursivamente em estruturas aninhadas. Utilize dive para validar os elementos de uma fatia:

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

Verificação rápida

Qual é a diferença entre c.ShouldBindJSON e c.BindJSON no Gin?

Recapitulação: vinculação de requisições

Pontos principais:

  • ShouldBindJSON/ShouldBindQuery/ShouldBindUri para vinculação tipada
  • Anotações binding:"required,email,gte=0" por meio de go-playground/validator
  • Validadores personalizados por meio de binding.Validator.Engine()
  • Analise ValidationErrors para obter mensagens de erro no nível dos campos

Perguntas Frequentes

A aula “Vinculação e validação de requisições” é grátis?

Sim — o texto completo de “Vinculação e validação de requisições” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Vinculação e validação de requisições”?

ShouldBindJSON, tags de vinculação e validator Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Vinculação e validação de requisições”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Roteador Gin e grupos de rotas
  2. Vinculação e validação de requisições
  3. Auxiliares de resposta e códigos de status
  4. Middleware do Gin: autenticação e logging
← Voltar para Go Academy