Go 1.20, a versão de produção da linguagem de código aberto criada pela Google, celebrada pela sua simplicidade, concorrência e funcionalidades de programação funcional, foi apresentada, com uma pré-visualização da optimização guiada por perfis (PGO) para o compilador. O Go 1.20 pode ser descarregado a partir do sítio Web oficial go.dev.
Com a pré-visualização do PGO no Go 1.20, a cadeia de ferramentas do compilador pode realizar optimizações específicas da aplicação e da carga de trabalho, dependendo das informações do perfil de tempo de execução. O compilador atual suporta perfis de CPU pprof, que podem ser coletados usando os pacotes runtime/pprof ou net/http/pprof.
Também conhecido como otimização dirigida por feedback, o PGO envolve a alimentação de dados de perfil de execuções representativas do aplicativo de volta ao compilador para a próxima compilação do aplicativo. Ao utilizar esta informação, o compilador pode tomar decisões de optimização mais informadas. Os benchmarks para um conjunto representativo de programas Go mostram que a activação da optimização de inlining PGO aumenta o desempenho em cerca de 3% a 4%. Espera-se que as versões futuras introduzam mais optimizações PGO.
Junto com a introdução do PGO, Go 1.20 também traz quatro mudanças para a linguagem. Em primeiro lugar, a capacidade de converter uma fatia em um ponteiro de array, introduzida no Go 1.17 de 2021, agora se estende a conversões de uma fatia para um array. Em segundo lugar, o pacote unsafe inclui três novas funções: SliceData, String e StringData. Estas funções oferecem a capacidade completa de construir e desconstruir valores de slice e string, independentemente da sua representação exacta.
Em terceiro lugar, a especificação estabelece agora que os valores struct são comparados um campo de cada vez, tendo em conta os campos pela ordem em que aparecem na definição do tipo struct, e parando na primeira incompatibilidade. Em quarto lugar, os tipos comparáveis, como as interfaces normais, podem satisfazer restrições comparáveis, mesmo que os argumentos do tipo não sejam estritamente comparáveis. Isso permite a instanciação de um parâmetro de tipo restringido por restrições comparáveis com um argumento de tipo não estritamente comparável, como um tipo de interface ou um tipo composto que contém um tipo de interface.
Além dessas mudanças na linguagem, o Go 1.20 vem com várias outras melhorias, como o suporte à coleta de perfis de cobertura de código para programas, incluindo aplicativos e testes de integração. O diretório $GOROOT/pkg não mantém mais atividades de pacotes pré-compilados para a biblioteca padrão, o que reduz o tamanho da distribuição Go e evita a distorção da cadeia de ferramentas C para pacotes cgo. Além disso, a implementação do go test -json foi fortificada para aumentar a robustez, enquanto o comando go version -m agora lê uma gama maior de binários Go, incluindo DLLs do Windows e binários do Linux sem permissão de execução.
Go 1.20 também traz suporte experimental para FreeBSD em RISC-V e desabilita o cgo por padrão em sistemas sem uma cadeia de ferramentas C. No entanto, o Go 1.20 será a última versão a suportar o macOS 10.13 High Sierra e 10.14 Mojave, com o Go 1.21 exigindo o macOS 10.15 Catalina ou posterior.
No-code plataforma como AppMaster.io pode beneficiar muito com a incorporação de linguagens recentemente optimizadas como Go 1.20. Ao integrar estas ferramentas poderosas para aplicações Web, móveis e de backend, as empresas podem obter melhorias significativas na produtividade, experiência do utilizador e escalabilidade. Saiba mais sobre o desenvolvimento de aplicaçõesno-code e low-code para se manter à frente da curva tecnológica.