- Para marcar o 16º aniversário da abertura do Go como open source, foi organizado um resumo dos principais avanços técnicos do último ano e dos planos futuros
- Nas versões Go 1.24 e 1.25, houve grandes melhorias em testes, segurança e desempenho de forma abrangente
- Recursos como
synctest, container-aware scheduling e flight recorder reforçam a confiabilidade e a eficiência em ambientes de produção
- A preparação para a certificação FIPS 140-3 dos pacotes criptográficos e o Green Tea GC melhoram segurança e desempenho
- O ecossistema Go está se expandindo com desenvolvimento integrado com IA e automação moderna de código, com reforço planejado para suporte a hardware de grande escala e IA
16 anos do Go e visão geral dos lançamentos recentes
- Em 10 de novembro, foi celebrado o 16º aniversário da abertura do Go como software open source
- Em fevereiro de 2024 foi lançado o Go 1.24, e em agosto o Go 1.25, seguindo o ciclo regular de lançamentos
- As duas versões incluem APIs para desenvolvimento de software confiável, reforço de segurança e melhorias de desempenho do runtime
- A equipe do Go está avançando no desenvolvimento de IA integrada, agentes e infraestrutura com base em Go para responder às mudanças da era da IA generativa
Principais melhorias da linguagem e da biblioteca padrão
- O pacote
testing/synctest, introduzido de forma experimental no Go 1.24 e oficializado no 1.25, simplifica os testes de código assíncrono e paralelo
- Com virtualização do tempo, transforma testes lentos ou instáveis em testes confiáveis e imediatos
- Tem uma estrutura profundamente integrada ao runtime do Go e à biblioteca padrão
- A API
testing.B.Loop melhora a usabilidade da API de benchmark existente (B.N) e elimina armadilhas tradicionais
- Foram adicionadas APIs de limpeza de testes e saída de logs baseadas em
Context, aumentando a eficiência no gerenciamento de testes
- O Go 1.25 introduziu container-aware scheduling, ajustando automaticamente o paralelismo dentro de contêineres
- Evita throttling de CPU e melhora a latência
- O recurso flight recorder amplia o rastreador de execução, permitindo registrar em detalhe os eventos imediatamente anteriores a uma falha
Desenvolvimento de software com foco em segurança
- Os pacotes criptográficos do Go passaram por auditoria da empresa de segurança independente Trail of Bits, que encontrou apenas um único problema de baixa gravidade
- Em cooperação entre o Go Security Team e a Geomys, foi obtida a certificação CAVP e concluída a preparação para a certificação FIPS 140-3
- Isso aumenta a viabilidade do uso de Go em ambientes regulados e resolve a dependência de soluções informais existentes
- A biblioteca padrão do Go está evoluindo para uma abordagem safe by default
- A API
os.Root do Go 1.24 evita vulnerabilidades de path traversal ao acessar o sistema de arquivos
Melhorias na estrutura interna e no desempenho
- No Go 1.24, a implementação de
map foi completamente redesenhada, refletindo projetos modernos de tabelas hash
- Melhorando o desempenho, reduzindo a latência e aumentando a eficiência de memória
- O coletor de lixo Green Tea do Go 1.25 reduz a sobrecarga de GC em 10% a 40%
- Aplica novos algoritmos ajustados ao hardware moderno
- No Go 1.26, está prevista uma melhoria adicional de 10% em hardware com suporte a AVX-512
- A ativação por padrão está prevista a partir do Go 1.26
Expansão da stack de desenvolvimento e integração com IA
- O Go está evoluindo além de uma linguagem para se tornar uma plataforma completa de desenvolvimento
- O servidor de linguagem gopls ganhou recursos em quatro lançamentos regulares (v0.17~v0.20)
- Foram adicionados analisadores de código, refatoração, tratamento de tags JSON e um servidor MCP embutido, entre outros
- Foi introduzido o recurso de modernização automática de código (modernizer)
- Ele converte automaticamente padrões de código obsoletos em formas modernas e seguras
- Integrado aos recursos de sugestão da IDE, ajuda a manter o código consistente e auxilia o treinamento com suporte de IA
- No Go 1.26, o comando
go fix deverá ser reformulado para aplicar de uma vez todo o modernizer
- Em colaboração com a Anthropic e a comunidade, foi lançado o SDK oficial de Go v1.0.0 para o Model Context Protocol (MCP)
- Oferece suporte a clientes e servidores MCP, com base nos recursos MCP do gopls
- O ADK for Go do Google fornece, sobre o MCP SDK, um framework para desenvolver sistemas multiagentes
- Isso demonstra que a concorrência, o desempenho e a confiabilidade do Go são adequados para o desenvolvimento de IA em produção
Próximos planos e comunidade
- Estão previstos a disponibilidade geral do Green Tea GC, suporte a hardware SIMD e maior escalabilidade multicore
- Também estão em andamento uma grande atualização de
encoding/json, profiling de vazamento de goroutines e melhorias em net/http e unicode
- Haverá expansão da linguagem, das ferramentas e do sistema de diagnóstico para a combinação entre Go e IA
- O projeto open source do Go busca ampliar a comunidade de contribuidores e a escalabilidade do processo de desenvolvimento
- A evolução do Go se baseia nas contribuições da comunidade de usuários e contribuidores, indicando crescimento contínuo no futuro
1 comentários
Comentários do Hacker News
Eu gosto muito de Go. Ele brilha especialmente em ambientes de monorepo. Ao adicionar uma nova aplicação, basta criar uma pasta e colocar um arquivo Go com a função
main(). A partir da raiz,go install ./...compila tudo rapidamenteQuando preciso criar um programa de CLI rápido, essa simplicidade foi realmente genial
Antigamente diziam que a linguagem não era o gargalo, mas quando vi Go pela primeira vez pensei: “isso é diferente”. Também é muito rápido de aprender — talvez porque a especificação da linguagem seja pequena.
Na prática, parece 80% dos recursos de Rust com 20% do esforço
Para mim, Go parece um Rust simplificado demais. Correção automática de código, obrigatoriedade de laços e até verificar a existência de chave em map são incômodos.
Lidar com arrays ou definir enums também é estranho, e as regras de linter da empresa fragmentam o código, fazendo tudo parecer Java corporativo.
Ainda assim, as interfaces são simples e é rápido de aprender.
Se Go tivesse enums de verdade, sintaxe de slice mais natural, iterators e atalho de sintaxe para desempacotar resultados, seria muito melhor
A biblioteca padrão de JSON também tem vários problemas, como serializar slices vazios como null.
Mesmo assim, reconheço a rapidez das ferramentas e sua praticidade
Desempacotamento de resultados é algo que a comunidade discute há muito tempo, mas ainda não existe uma solução elegante
Se você remove elementos do meio de um array com frequência, escolheu a estrutura de dados errada
slices.Delete, e coisas como obrigarif err != nilnão são problema da linguagem, e sim problema de regra da equipePor um momento fiquei animado achando que Go seria lançado para o Apple II (referência ao SWEET16)
É fácil contribuir para uma nova base de código em Go.
Graças à simplicidade da linguagem e a ferramentas padrão como gofmt e golangci-lint, todas as bases de código têm uma estrutura parecida.
Não há discussões sobre ferramentas de build como em comunidades de outras linguagens
Mas a forma como o operador
%lida com números negativos me confundiuA adoção de uma ferramenta automática de modernização de código (modernizer) é interessante.
Desde o gopls v0.18.0, ela usa análise sintática para encontrar padrões antigos e convertê-los automaticamente em código mais rápido e seguro.
Assim como o gofmt criou consistência de estilo, o modernizer vai criar consistência de idiomatismos
Ao ativar linters como exhaustive, exhaustruct e wrapcheck no golangci-lint, a segurança melhora muito e a velocidade de desenvolvimento aumenta
Na nossa empresa, estamos operando um programa de onboarding de 10 semanas para desenvolvedores backend Go (link do plano)
Já faz 7 anos que migrei de Python para Go, e isso foi um fator-chave para o sucesso da startup
No começo eu desconfiava de Go, mas agora é minha linguagem favorita. É simples e poderosa.
Ainda assim, seria bom se verificação de null, stack trace de erros e checagem exaustiva de sum type viessem por padrão
Acho que Go seria perfeito se tivesse só mais alguns recursos ligados a programação funcional.
Sinto falta principalmente de imutabilidade, tratamento de null e exhaustividade em switch.
Estou compensando isso com o NilAway da Uber, mas seria melhor se houvesse suporte no próprio sistema de tipos