A tão esperada linguagem de programação Go 1.18 finalmente foi lançada como uma versão de produção, apresentando seus recursos genéricos inovadores. Isso marca a mudança mais significativa na linguagem de programação Go desde o lançamento inicial do Go 1.0 em 2012. O Go 1.18 pode ser baixado em go.dev a partir de 15 de março.
Generics tem sido o recurso mais solicitado pelos programadores Go, oferecendo suporte para código genérico usando tipos parametrizados. Os lançamentos subsequentes estão programados para fornecer mais suporte para casos de uso genéricos mais complexos. Os usuários podem acessar informações sobre esse recurso por meio de um tutorial genérico e notas de versão .
O servidor de linguagem Go, gopls, junto com a extensão Visual Studio Code Go, agora oferece suporte a genéricos. Para obter instruções sobre como instalar gopls com genéricos, consulte a documentação.
A versão de produção Go 1.18 segue seus estágios beta e candidato a lançamento. O lançamento inicial havia sido antecipado para fevereiro de 2022, mas foi adiado até meados de março. O Go 1.18 Beta 1, que estreou em 14 de dezembro, foi a versão prévia mais importante da linguagem de código aberto desenvolvida pelo Google para oferecer suporte a código genérico usando tipos parametrizados. Esta versão beta também foi a versão beta do Go mais baixada de todos os tempos, com o dobro de downloads de qualquer versão beta anterior.
A programação genérica é um aprimoramento que permite a representação de funções e estruturas de dados de forma genérica com os tipos sendo fatorados. Isso facilita o compartilhamento de código e simplifica a construção de programas.
A equipe Go aconselhou cautela ao abordar os novos recursos genéricos, pois novos bugs podem surgir com qualquer novo recurso significativo. Além disso, o suporte para casos sutis específicos, como certos tipos de tipos genéricos recursivos, foi adiado para versões futuras.
Apesar desse aviso, os primeiros usuários ficaram satisfeitos com o novo recurso. Um breve tutorial sobre como começar com genéricos foi publicado aqui . Embora o Go tivesse tipos de interface, uma forma de programação genérica, faltavam certos aspectos que os desenvolvedores Go queriam dos genéricos, conforme relatado em uma postagem no blog de julho de 2019. Por exemplo, os proponentes dos genéricos Go buscavam funções como Reverse sem se preocupar com o tipo de elemento de uma fatia.
As notas lançadas para o Go 1.18 também destacam seus outros recursos principais, como:
- Suporte integrado para escrever testes baseados em fuzzing para identificar entradas que causam a falha de um programa ou retornam respostas inválidas. Esse recurso é experimental no Go 1.18.
- Um modo de espaço de trabalho Go que permite aos desenvolvedores trabalhar com vários módulos Go simultaneamente, essencial para projetos mais extensos.
- Um comando go version -m aprimorado que agora registra detalhes de compilação, como sinalizadores de compilador.
- Uma variável de ambiente GOAMD64 que permite aos usuários escolher entre quatro versões da arquitetura AMD64.
- Melhorias no desempenho da CPU no Apple M1, ARM64 e PowerPC64 em até 20%, atribuíveis à expansão da convenção de chamada ABI do registro Go 1.17 para essas arquiteturas.
- As portas Windows/Arm e Windows/Arm64 agora oferecem suporte à preempção não cooperativa, tornando esse recurso disponível para todas as quatro portas Windows e potencialmente abordando bugs sutis encontrados ao chamar funções Win32 que bloqueiam por períodos prolongados.
- Sobrecarga de coleta de lixo mais previsível quando as fontes não heap do trabalho de GC são significativas, devido à inclusão dessas fontes ao determinar a frequência das execuções da coleta de lixo.
O Go 1.17 foi lançado em agosto. Go é mais conhecido por seu uso no desenvolvimento do sistema de contêiner Docker e foi projetado para ser uma linguagem de programação simples e fácil de aprender com suporte robusto para simultaneidade. Para desenvolvedores que desejam explorar soluções no-code, como a plataforma da AppMaster, para criar aplicativos web, móveis e de back-end, ele pode ajudar a acelerar o desenvolvimento de aplicativos e reduzir custos enquanto elimina a dívida técnica.