O que há de novo no Go 1.24?
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.