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 série 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 (Performance Boost)

Uma melhoria geral de desempenho com uma redução de 2-3% na sobrecarga de CPU em um conjunto de benchmarks representativos. Esses aprimoramentos incluem uma nova implementação de mapa (map) integrada, 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 (Post-Quantum Crypto)

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 (TLS Enhancement)

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

Novo Mapa Swiss Table (New Swiss Table Map)

Uma implementação de mapa (map) aprimorada para melhor desempenho. Esta nova implementação é baseada em Swiss Tables e pode ser desativada com o build flag GOEXPERIMENT=noswissmap.

Atualização de Sync Map (Sync Map Update)

Desempenho aprimorado para modificações de mapa (map) em sync.Map. As 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 alcançar 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 (Enhanced JSON Marshaling)

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 (Runtime Cleanup)

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

Diretivas de Ferramentas em go.mod (Tool Directives in go.mod)

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

Acesso Limitado a Diretórios (Directory-Limited Access)

Novo tipo os.Root para operações controladas do sistema de arquivos. O tipo os.Root fornece 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 (Testing Improvements)

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 que todas as goroutines na bolha atual sejam bloqueadas. Este pacote é experimental e deve ser habilitado definindo GOEXPERIMENT=synctest no momento da construção (build time).

Cache de Construção (Build Cache)

Os 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 à custa de tornar o cache maior.

Desempenho de Cgo (Cgo Performance)

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 chama de volta nenhuma função Go.

Ponteiros Fracos (Weak Pointers)

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 eficientes em termos de memória, como mapas fracos para associar valores, mapas de canonização e vários tipos de caches.

Melhoria de Benchmark (Benchmark Improvement)

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, de modo que as etapas caras de configuração (setup) e limpeza (cleanup) sejam executadas apenas uma vez. Os parâmetros de chamada de função e os resultados são mantidos vivos, impedindo que o compilador otimize totalmente o corpo do laço (loop).

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

Overview of Go 1.24