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 multipartValidaçã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
- Roteador Gin e grupos de rotas
- Vinculação e validação de requisições
- Auxiliares de resposta e códigos de status
- Middleware do Gin: autenticação e logging