Já com sua primeira Release Candidate nas ruas, a versão mais aguardada dos últimos tempos está cada vez mais próxima de ser lançada.
Nesse post vou abordar as principais mudanças que essa versão irá trazer.
Any
Na nova versão da linguagem, foi adicionado o novo tipo de dado, o any
. Esse tipo nada mais é do que uma alias para interface{}
.
Isso não impede ou quebra nenhum código que utilizar interface{}
, porém é recomendado mudar para any
por questões de leitura.
Se você achar estranho, não se esqueça que o tipo byte
é só um alias para uint8
.
Generics (aka Type Parameters)
A feature aguardada a mais de 12 anos finalmente estará implementada e disponível para uso.
Generics nos dá a possibilidade de ter funções onde podemos definir o tipo de dado de um determinado parâmetro no momento de sua chamada.
Vou deixar 3 links aqui caso você queira saber mais a fundo como utilizar generics.
Fuzzy Testing
A técnica de fuzzing basicamente gera inputs automaticamente para testar as funções que escrevemos.
Nos testes que fiz, por mais que eu achasse que tinha coberto todas as possibilidades, ao executar um fuzzy test, logo via que estava errado 😂.
Para ver essa técnica sendo utilizada, é só clicar no link abaixo.
Novo package de endereço de IP
O novo package net/netip
, define um novo tipo para lidar com endereços de IP, o Addr
.
O tipo netip.Addr
usa menos memória, é imutável e comparável.
Workspace para módulos
Se você precisa ficar enchendo seu arquivo go.mod de replace para apontar algumas dependências para módulos locais, o novo arquivo go.work promete facilitar sua vida, pois nada disso será mais necessário.
Para entender melhor como isso vai funcionar, vou deixar um link com uma demo da utilização.
Build & Version Info
Agora podemos utilizar o package debug/buildinfo
para acessar versões de módulos, informação da versão de nossa app e os valores das flags de build que são adicionadas em nosso binário pelo comando de build do go.
É isso! Espero que tenham gostado e até a próxima!