Anunciando Gin 1.12.0: Suporte BSON, Melhorias de Contexto, Desempenho e Mais
Gin v1.12.0 Chegou
Estamos entusiasmados em anunciar o lançamento do Gin v1.12.0, repleto de novos recursos, melhorias significativas de desempenho e uma sólida rodada de correções de bugs. Este lançamento aprofunda o suporte do Gin a protocolos modernos, refina a experiência do desenvolvedor e continua a tradição do projeto de ser rápido e leve.
Recursos Principais
-
Suporte ao protocolo BSON: A camada de renderização agora suporta codificação BSON, abrindo portas para troca de dados binários mais eficiente (#4145).
-
Novos métodos de contexto: Dois novos helpers tornam o tratamento de erros mais limpo e idiomático:
-
Binding flexível: O binding de URI e query agora respeita
encoding.UnmarshalText, dando mais controle sobre a deserialização de tipos customizados (#4203). -
Opção de caminho escapado: Uma nova opção do engine permite optar por usar o caminho da requisição escapado (raw) para roteamento (#4420).
-
Protocol Buffers na negociação de conteúdo: O
contextagora suporta Protocol Buffers como um tipo de conteúdo negociável, facilitando a integração de respostas no estilo gRPC (#4423). -
Latência colorizada no Logger: O logger padrão agora renderiza a latência com cores, facilitando identificar requisições lentas rapidamente (#4146).
Desempenho e Melhorias
- Otimizações na árvore do roteador: Múltiplas melhorias na árvore radix reduzem alocações e aceleram a análise de caminhos:
- Otimização de Recovery: A leitura de stack trace agora é mais eficiente (#4466).
- Melhorias no Logger: A saída de query string agora pode ser omitida via configuração (#4547).
- Confiança em Unix Socket: Headers
X-Forwarded-Foragora são sempre confiáveis quando requisições chegam por Unix socket (#3359). - Segurança do Flush:
Flush()não causa mais panic quando ohttp.ResponseWritersubjacente não implementahttp.Flusher(#4479). - Refatorações de qualidade de código: Tratamento mais limpo de maps com
maps.Copyemaps.Clone, constantes nomeadas substituindo números mágicos, loops range-over-int modernizados e mais (#4352, #4333, #4529, #4392).
Correções de Bugs
- Panic no roteador corrigido: Resolvido um panic em
findCaseInsensitivePathRecquandoRedirectFixedPathestá habilitado (#4535). - Content-Length no Data Render:
Data.Renderagora escreve corretamente o headerContent-Length(#4206). - ClientIP com múltiplos headers:
ClientIPagora trata corretamente requisições com múltiplos valores de headerX-Forwarded-For(#4472). - Casos extremos de binding: Corrigidos erros de valores vazios no binding (#2169) e melhorado o tratamento de slices/arrays vazios no binding de formulários (#4380).
- Rotas com dois-pontos literais: Rotas com dois-pontos literais agora funcionam corretamente com
engine.Handler()(#4415). - Vazamento de file descriptor:
RunFdagora fecha o handleos.Filecorretamente para prevenir vazamento de recursos (#4422). - Comportamento de Hijack: Refinado o comportamento de hijack para modelar corretamente o ciclo de vida da resposta (#4373).
- Recovery:
http.ErrAbortHandleragora é suprimido no middleware de recovery conforme planejado (#4336). - Versão incorreta em debug: Corrigida uma string de versão incorreta reportada no modo debug (#4403).
Atualizações de Build, Dependências e CI
- Go 1.25 mínimo: A versão mínima suportada do Go agora é 1.25, com workflows de CI atualizados adequadamente (#4550).
- Atualização da dependência BSON: A dependência de binding BSON foi atualizada para
mongo-driverv2 (#4549).
O Gin 1.12.0 reflete a dedicação da nossa comunidade — contribuidores, revisores e usuários. Obrigado por tornar o Gin melhor a cada lançamento.
Pronto para experimentar o Gin 1.12.0? Atualize no GitHub e diga-nos o que você acha!