Golang 1.18: o que há por vir

Vinny Nordi
Avenue Tech
Published in
3 min readNov 26, 2021
Logo Golang — https://blog.golang.org/go-brand

Uma nova versão da linguagem Golang está por vir nos próximos meses. A versão 1.18 chega com algumas novidades que, já tiveram uma tentativa de implementação anterior, como Type Parameters, os famosos generics, além da adição de Fuzzy Testing, uma nova maneira de testar em Go.

Generics

Como desenvolvedor Golang, você provavelmente já se deparou com o caso onde uma função — ou uma variável — possuem uma tipificação dinâmica.

O que isso significa? Significa que você gostaria que uma função de comparação de arrays pudesse suportar tanto um array de valores inteiros, quanto um array de valores reais.

Os dois trechos de código acima apresentam a maneira de permitir a funcionalidade de comparação de arrays, utilizando a última versão de Golang 1.17.

Observe que a única diferença entre ambas funções é o tipo de parâmetro aceito. Na primeira função, são aceitos dois arrays de inteiros, e na segunda, dois arrays de números reais.

Com o generics poderemos criar apenas uma função, como no exemplo, e definir o tipo dos parâmetros que serão utilizados.

Em Go, tipos generics são escritos na forma type T.

Além disso, o tipo any poderá ser utilizado quando existir a necessidade de permitir qualquer tipo existente em Golang.

Além de funções, outra maneira de utilizar generics, é definindo variáveis, veja:

Observe a linha 1. Definimos uma variável genérica e podemos utilizá-la como parâmetro na função FacaAlgo, definida na linha 7, ou como method receiver.

Fuzzy Testing

Uma nova maneira de realizar testes unitários em Golang também chegará na nova versão. Trata-se de Fuzzy Testing.

Atualmente, quando vamos testar alguma função, definimos quais parâmetros serão utilizados como entrada, e quais valores serão esperados como resposta. Contudo, isso pode fazer com que casos não esperados, os famosos corner cases, passem despercebidos durante os testes.

Para se considerar um teste Fuzzy, as funções devem ser definidas na forma

func FuzzXxx(*testing.F)

Durante um teste Fuzzy, os valores são gerados aleatoriamente pelo sistema de testes. Contudo, há a possibilidade de adicionar alguns valores que default para serem utilizados durante o teste.

Entre as linhas 2–4, os valores default que gostaríamos de utilizar durante a execução do teste são adicionados ao fluxo de execução. Além disso, mais valores randômicos serão gerados e utilizados pelo sistema.

A execução de go test -fuzz usa como valor default $GOMAXPROCS processos em paralelo. Isso pode tornar o seu computador lente durante o período de testes. Será possível alterar o número de instâncias em paralelo utilizado a flag -paralel.

Para quem tem interesse em testar essa nova capacidade em Golang, pode encontrar instruções aqui. Vale lembrar que essa é uma nova implementação na linguagem Go, e está em período Beta. Portanto, existem funcionalidades que ainda não estão disponíveis.

Conclusão

A nova versão de Golang, que está por vir, trará duas grandes mudanças para o universo de desenvolvimento da linguagem.

A primeira é generics e sua capacidade de tornar o código mais reaproveitável, e a segunda Fuzzy Testing, e uma maneira de tornar seu código, quando testado, mais seguro.

--

--

Vinny Nordi
Avenue Tech

Lutando contra o lado sombrio dos micro-serviços