Lançado Go 1.22: o que mudou na linguagem
A equipe de desenvolvedores Go apresentou o tão aguardado lançamento da versão 1.22. Esta atualização traz uma série de mudanças significativas, visando melhorar o desempenho, a segurança e a facilidade de desenvolvimento. Vamos analisar as novidades mais importantes.
Principais novidades da versão 1.22
1. Loops for-range melhorados
Uma das mudanças mais esperadas é a reformulação do comportamento das variáveis em loops for-range. Anteriormente, a variável declarada no cabeçalho do loop era criada uma vez e reutilizada em cada iteração. Isso gerava bugs difíceis de detectar, especialmente ao capturar a variável em closures (por exemplo, ao passar para goroutines).
A partir do Go 1.22, cada iteração do loop for-range cria sua própria nova variável. Isso torna o código mais previsível e seguro.
- Comportamento antigo: uma variável para todo o loop, erros frequentes com ponteiros e goroutines.
- Novo comportamento: cada iteração recebe sua própria cópia da variável, eliminando bugs comuns.
Essa mudança afeta tanto loops sobre slices, maps e channels, quanto os tradicionais loops for de três componentes.
2. Suporte a integer range no for-range
Go 1.22 introduz a possibilidade de iterar diretamente sobre um intervalo inteiro. Agora é possível escrever simplesmente for i := range 10 em vez de construções complexas com for i:=0; i < 10; i++.
Essa simplificação sintática torna o código mais limpo e reduz a probabilidade de erros "off-by-one".
// Era:for i := 0; i < 5; i++ { ... }
// Agora:for i := range 5 { ... }3. Nova implementação do pacote math/rand/v2
O pacote math/rand recebeu uma segunda versão — math/rand/v2. Não se trata apenas de uma atualização, mas de uma reformulação completa com foco em velocidade e qualidade da geração de números aleatórios.
- Desempenho: A geração de números tornou-se significativamente mais rápida (em alguns benchmarks, de 2 a 3 vezes).
- Algoritmos: São usados algoritmos modernos e mais confiáveis (por exemplo, ChaCha8 para o gerador padrão).
- Facilidade: A nova API simplifica o trabalho com geradores, removendo várias funções obsoletas.
O pacote antigo math/rand ainda está disponível para compatibilidade reversa, mas para novos projetos, recomenda-se o uso de math/rand/v2.
Outras melhorias importantes
- Roteamento melhorado no net/http: O pacote
net/httpagora suporta uma nova forma de registrar handlers usando padrões, aproximando-se do estilo de frameworks padrão. Os desenvolvedores podem definir rotas mais flexíveis, incluindo substituições e métodos HTTP. - Otimização da coleta de lixo: O garbage collector tornou-se mais eficiente, resultando em menor latência e redução do pico de consumo de memória em alguns cenários.
- Atualização da biblioteca padrão: Foram feitas pequenas, mas úteis, alterações no trabalho com slices, maps e strings, melhorando o desempenho e a estabilidade.
- Melhorias nas ferramentas