Visão Geral do Lançamento do Go 1.24: Mapas Swiss Table, ML-KEM, os.Root e testing/synctest

Go 1.24 está se configurando como uma versão significativa, introduzindo um conjunto de aprimoramentos voltados para 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.
Melhoria de Desempenho
Uma melhoria geral de desempenho, com redução de 2-3% na sobrecarga de CPU em um conjunto representativo de benchmarks. Essas melhorias incluem uma nova implementação de map embutida, alocação de memória mais eficiente para objetos pequenos e uma nova implementação de mutex interna ao runtime. Os resultados podem variar de acordo com a 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. Essa adição prepara o Go para o futuro da segurança criptográfica.
Aprimoramento de TLS
Suporte para Encrypted Client Hello (ECH) em TLS. Esse recurso pode ser habilitado preenchendo o campo Config.EncryptedClientHelloKeys, aprimorando a privacidade e a segurança das conexões TLS.
Novo Map Baseado em Swiss Tables
Uma implementação de map aprimorada para melhor desempenho. Essa nova implementação é baseada em Swiss Tables e pode ser desabilitada com a flag de build GOEXPERIMENT=noswissmap.
Atualização do Sync Map
Desempenho aprimorado para modificações de map em sync.Map. Modificações em conjuntos disjuntos de chaves têm muito menos probabilidade de competir por recursos em maps maiores, e não há mais tempo de aquecimento necessário para alcançar cargas de baixa contenção a partir do map. Caso encontre problemas, é possível reverter para a implementação antiga usando GOEXPERIMENT=nosynchashtriemap.
Marshaling JSON Aprimorado
Uma nova opção de tag omitempty para uma omissão mais inteligente de campos de struct durante o marshaling JSON. Durante o marshaling, um campo de struct com a opção omitempty será omitido se seu valor for zero. Se o tipo do campo possuir um método IsZero() bool, esse método será utilizado para determinar se o valor é zero.
Limpeza no Runtime
Introdução da função AddCleanup para substituir SetFinalizer e oferecer melhor gerenciamento de recursos. Diferentemente de SetFinalizer, ela não ressuscita o objeto ao qual está associada para finalização, e múltiplas limpezas podem ser associadas a um único objeto. Código novo deve preferir AddCleanup em vez de SetFinalizer.
Diretivas de Ferramentas em go.mod
Rastreamento aprimorado de dependências de executáveis por meio de diretivas de ferramentas em go.mod. Isso elimina a necessidade da solução anterior de adicionar ferramentas como importações em branco em um arquivo convencionalmente nomeado “tools.go”.
Acesso Limitado a Diretórios
Novo tipo os.Root para operações controladas no sistema de arquivos. O tipo os.Root oferece a capacidade de realizar operações no sistema de arquivos dentro de um diretório específico, impedindo o acesso fora do caminho especificado.
Melhorias em Testes
Novo pacote testing/synctest para testar código concorrente. A função synctest.Run inicia um grupo de goroutines em um “bubble” isolado, e a função synctest.Wait aguarda até que todas as goroutines no bubble atual sejam bloqueadas. Este pacote é experimental e deve ser habilitado definindo GOEXPERIMENT=synctest no momento do build.
Cache de Build
Os executáveis de go run agora são armazenados em cache para uma execução mais rápida. Isso torna execuções repetidas mais rápidas, ao custo de um cache maior.
Desempenho do Cgo
Novas anotações #cgo noescape e #cgo nocallback para melhor desempenho do 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 chama de volta nenhuma função Go.
Ponteiros Fracos
Suporte a ponteiros fracos para referenciar memória com segurança sem impedir sua reclamação. Ponteiros fracos são uma primitiva de baixo nível fornecida para possibilitar a criação de estruturas eficientes em memória, como maps fracos para associar valores, maps de canonicalização e diversos tipos de caches.
Melhoria em Benchmarks
Novo método testing.B.Loop para benchmarks mais rápidos e menos suscetíveis a erros. A função de benchmark será executada exatamente uma vez por -count, de modo que etapas custosas de configuração e limpeza sejam executadas apenas uma vez. Os parâmetros e resultados das chamadas de função são mantidos vivos, impedindo que o compilador otimize completamente o corpo do loop.
Go 1.24 está se configurando como uma versão significativa, oferecendo melhorias substanciais em diversos aspectos da linguagem e de seu ecossistema.
