---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Visão Geral do Lançamento do Go 1.24: Mapas Swiss Table, ML-KEM, os.Root e testing/synctest'
description: 'Visão técnica geral do Go 1.24: mapas nativos baseados em Swiss Table, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root e testing/synctest.'
language: pt
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

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.

![Visão geral do Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
