9 pontos por lemonmint 2025-08-13 | Ainda não há comentários. | Compartilhar no WhatsApp

[IMG] Overview

A versão Go 1.25 foi oficialmente lançada. Esta versão inclui melhorias em ferramentas, runtime, compilador e biblioteca padrão como um todo, além de apresentar funcionalidades experimentais importantes que os usuários podem testar antecipadamente e sobre as quais podem enviar feedback.

  • Principais destaques:
    • Manutenção da compatibilidade com a versão Go 1
    • Melhorias abrangentes em ferramentas, runtime, compilador e bibliotecas
    • Introdução de novas funcionalidades experimentais (GreenTea GC, pacote json/v2)

Funcionalidades experimentais principais

O Go 1.25 inclui duas funcionalidades experimentais principais voltadas para melhorar desempenho e recursos, que podem ser ativadas pelos usuários por meio da configuração de variáveis de ambiente.

Novo coletor de lixo GreenTea (GC)

O objetivo é melhorar o desempenho reduzindo a sobrecarga do GC ao lidar com grande quantidade de objetos pequenos.

  • Como funciona: objetos pequenos com menos de 512 bytes são agrupados em unidades de 8KiB chamadas "memory spans" para execução do GC. Isso aumenta a localidade de memória (locality) e maximiza a eficiência do cache da CPU.
  • Efeitos esperados:
    • Melhoria no desempenho do GC com redução do custo de saltos de memória
    • Funcionamento eficiente em ambientes multicore
    • Redução da sobrecarga de alocação de objetos pequenos e da fragmentação de memória
  • Como ativar: definir a variável de ambiente GOEXPERIMENT=greenteagc durante o build
Novo pacote encoding/json/v2

Trata-se de uma nova implementação de JSON projetada para resolver a falta de consistência, o comportamento imprevisível e os problemas de desempenho do encoding/json (v1) existente.

  • Objetivos principais:

    • Mais exatidão e previsibilidade: por padrão, aplica regras mais rígidas (por exemplo, diferenciação entre maiúsculas e minúsculas e proibição de chaves duplicadas), reduzindo comportamentos inesperados.
    • Melhoria de desempenho: o mecanismo de parsing e encoding foi reprojetado para aumentar a eficiência.
    • Mais flexibilidade e controle: foi introduzido um sistema refinado de opções para que desenvolvedores possam controlar detalhadamente o processamento de JSON.
  • Principais mudanças (v2 em relação à v1):

    • Correspondência de nomes de campos: ao contrário da abordagem sem diferenciação entre maiúsculas e minúsculas da v1, a v2 por padrão diferencia maiúsculas de minúsculas com precisão.
    • Mudança no significado da tag omitempty: enquanto a v1 omitía com base no "estado vazio" do valor Go (0, false, nil etc.), a v2 omite com base no "estado vazio" do valor JSON codificado (null, "", {}, []).
    • Tratamento de slices e maps nil: a v1 fazia marshal como null, mas a v2 por padrão faz marshal como [] (array vazio) e {} (objeto vazio), respectivamente.
    • Unmarshal de arrays: a v1 permitia que o tamanho do array JSON e do array Go fosse diferente, mas a v2 exige que os tamanhos correspondam exatamente, caso contrário retorna erro.
    • Tratamento de chaves duplicadas: a v1 permitia chaves duplicadas (sobrescrevendo com o último valor), mas a v2 por padrão retorna erro, reforçando exatidão e segurança.
    • Tratamento de UTF-8 inválido: a v1 substituía automaticamente caracteres UTF-8 inválidos por \uFFFD, mas a v2 por padrão retorna erro, evitando corrupção de dados.
  • Novos recursos e estrutura:

    • Estrutura modular: a análise sintática de baixo nível (pacote jsontext) e a conversão semântica de alto nível (pacote json/v2) foram separadas para melhorar a clareza do código e o desempenho.
    • Sistema robusto de opções: por meio de json.Options, é possível controlar detalhadamente diversos comportamentos e até reproduzir completamente o comportamento da v1.
    • Tratamento de tipos externos: com as opções WithMarshalers e WithUnmarshalers, é possível injetar lógica de serialização/desserialização para tipos de pacotes externos que não implementam as interfaces Marshaler/Unmarshaler.
  • Como ativar: definir a variável de ambiente GOEXPERIMENT=jsonv2 durante o build

Principais mudanças e melhorias

Este lançamento traz várias melhorias voltadas a aumentar a produtividade no desenvolvimento e a eficiência da execução de programas.

  • Runtime

    • GOMAXPROCS com reconhecimento de ambiente de contêiner: em Linux, reconhece automaticamente os limites de CPU do cgroup para definir o valor padrão de GOMAXPROCS e atualiza isso dinamicamente quando os recursos de CPU mudam.
    • Trace Flight Recorder: oferece um recurso leve de rastreamento que grava continuamente traces do runtime em um buffer circular na memória para depurar bugs raros.
  • Ferramentas e compilador

    • Correção de bug de ponteiro nil: foi corrigido um bug do compilador presente desde o Go 1.21 que adiava verificações de ponteiro nil, fazendo com que códigos que anormalmente tinham sucesso agora provoquem panic corretamente.
    • Suporte a DWARF5: usa a versão 5 do DWARF para informações de depuração, reduzindo o tamanho dos binários e o tempo de linkedição.
    • Nova diretiva go.mod ignore: permite configurar o comando go para ignorar diretórios específicos.
  • Biblioteca padrão

    • Adição do pacote testing/synctest: novo pacote para dar suporte a testes de código concorrente, permitindo execução isolada de testes em tempo virtualizado.
    • Melhoria de desempenho no pacote crypto: no modo FIPS, a velocidade de assinatura de ecdsa e ed25519 ficou 4 vezes maior, e a velocidade de hashing SHA também foi melhorada.
    • Adição de net/http CrossOriginProtection: oferece um novo recurso para defesa contra ataques CSRF usando metadados Fetch de navegadores modernos.

Mudanças de portas e suporte

  • macOS: a partir do Go 1.25, é necessário macOS 12 Monterey ou superior.
  • Windows: a porta 32 bits windows/arm deixará de ser suportada após esta versão.

Ainda não há comentários.

Ainda não há comentários.