GoSuda

O que há de novo no Go 1.24?

By Lemon Mint
views ...

O Go 1.24 está se configurando como um lançamento significativo, introduzindo uma gama de aprimoramentos focados em desempenho, segurança e experiência do desenvolvedor. Essas mudanças visam tornar o Go ainda mais poderoso e eficiente para a construção de aplicações modernas.

Aumento de Desempenho

Uma melhoria geral de desempenho com uma redução de 2-3% na sobrecarga da CPU em um conjunto de benchmarks representativos. Essas melhorias incluem uma nova implementação de mapa built-in, alocação de memória mais eficiente para objetos pequenos e uma nova implementação de mutex interna ao runtime. Os resultados podem variar por aplicação.

Criptografia Pós-Quântica

Introdução do pacote crypto/mlkem, implementando ML-KEM-768 e ML-KEM-1024. ML-KEM é um mecanismo de troca de chaves pós-quântico anteriormente conhecido como Kyber e especificado no FIPS 203. Esta adição prepara o Go para o futuro da segurança criptográfica.

Aprimoramento de TLS

Suporte para Encrypted Client Hello (ECH) em TLS. Este recurso pode ser habilitado populando o campo Config.EncryptedClientHelloKeys, aprimorando a privacidade e a segurança para conexões TLS.

Novo Swiss Table Map

Uma implementação de mapa aprimorada para melhor desempenho. Esta nova implementação é baseada em Swiss Tables e pode ser desabilitada com a flag de compilação GOEXPERIMENT=noswissmap.

Atualização do Sync Map

Desempenho aprimorado para modificações de mapa em sync.Map. Modificações de conjuntos disjuntos de chaves são muito menos propensas a gerar contenção em mapas maiores, e não há mais tempo de ramp-up necessário para atingir cargas de baixa contenção a partir do mapa. Se você encontrar problemas, pode reverter para a implementação antiga usando GOEXPERIMENT=nosynchashtriemap.

Marshaling JSON Aprimorado

Uma nova opção de tag omitempty para omissão mais inteligente de campos de struct durante o marshaling JSON. Ao realizar o marshaling, um campo de struct com a opção omitempty será omitido se seu valor for zero. Se o tipo do campo tiver um método IsZero() bool, este será usado para determinar se o valor é zero.

Limpeza de Runtime

Introdução da função AddCleanup para substituir SetFinalizer para melhor gerenciamento de recursos. Diferente de SetFinalizer, ela não ressuscita o objeto ao qual está anexada para finalização, e múltiplas limpezas podem ser anexadas a um único objeto. O novo código deve preferir AddCleanup em vez de SetFinalizer.

Diretivas de Ferramentas em go.mod

Rastreamento aprimorado de dependências executáveis usando diretivas de ferramentas em go.mod. Isso remove a necessidade da solução anterior de adicionar ferramentas como importações em branco a um arquivo convencionalmente nomeado "tools.go".

Acesso Limitado por Diretório

Novo tipo os.Root para operações controladas do sistema de arquivos. O tipo os.Root oferece a capacidade de realizar operações do sistema de arquivos dentro de um diretório específico, impedindo o acesso fora do caminho especificado.

Melhorias de Teste

Novo pacote testing/synctest para testar código concorrente. A função synctest.Run inicia um grupo de goroutines em uma "bolha" isolada, e a função synctest.Wait aguarda todas as goroutines na bolha atual bloquearem. Este pacote é experimental e deve ser habilitado definindo GOEXPERIMENT=synctest no tempo de compilação.

Cache de Compilação

Executáveis de go run agora são armazenados em cache para uma execução mais rápida. Isso torna as execuções repetidas mais rápidas em detrimento de um cache maior.

Desempenho de Cgo

Novas anotações #cgo noescape e #cgo nocallback para melhor desempenho de Cgo. #cgo noescape cFunctionName informa ao compilador que a memória passada para a função C não escapa. #cgo nocallback cFunctionName informa ao compilador que a função C não faz chamadas de retorno para nenhuma função Go.

Ponteiros Fracos

Suporte para ponteiros fracos para referenciar memória com segurança sem impedir a recuperação. Ponteiros fracos são uma primitiva de baixo nível fornecida para permitir a criação de estruturas com eficiência de memória, como mapas fracos para associar valores, mapas de canonicalização e vários tipos de caches.

Melhoria de Benchmark

Novo método testing.B.Loop para benchmarks mais rápidos e menos propensos a erros. A função de benchmark será executada exatamente uma vez por -count, então as etapas de configuração e limpeza caras são executadas apenas uma vez. Os parâmetros e resultados de chamadas de função são mantidos vivos, impedindo que o compilador otimize totalmente o corpo do loop.

O Go 1.24 está se configurando para ser um lançamento significativo, oferecendo melhorias substanciais em vários aspectos da linguagem e de seu ecossistema.

Overview of Go 1.24