Skip to content
Go

Go 1.27 Release Candidate: Métodos Genéricos e Suporte Nativo a UUID Chegam

Published: Duration: 5:04
0:00 0:00

Transcript

Convidado: Valeu, Juliana! O prazer é todo meu. É sempre massa falar de Go, ainda mais quando a gente tem um release recheado assim. A comunidade está num hype absurdo com esse RC da 1.27, e não é pra menos, né? Tem muita coisa boa vindo por aí. Apresentadora: Com certeza! E Rafael, vamos direto ao ponto que eu acho que é o "clímax" dessa versão: os métodos genéricos para tipos concretos. A gente já tinha generics no Go desde a 1.18, mas parecia que faltava uma peça no quebra-cabeça, né? Explica pra gente o que mudou de verdade. Convidado: Pois é, Ju. Na 1.18 a gente ganhou as funções genéricas e os tipos genéricos, o que já foi uma revolução. Mas tinha uma limitação que dava um nó na cabeça de muita gente: você não podia definir um método genérico em uma struct que não fosse ela mesma genérica. Tipo assim, se eu tivesse uma struct comum, um `MyService`, eu não podia criar um método nela que recebesse um parâmetro de tipo `T`. Agora, na 1.27, isso caiu! Apresentadora: Nossa, então agora eu posso ter uma struct "normal" e um método que aceita qualquer coisa? Tipo um `Process`? Convidado: Exatamente! Imagina que você tem um serviço de log ou de processamento. Antes, ou você usava `interface{}` — que hoje a gente chama de `any` — e ficava fazendo aquele monte de "type assertion" perigoso, ou criava várias funções soltas. Agora, você mantém a organização da sua struct e o método se adapta ao tipo que você passa na hora da chamada. O compilador checa tudo pra você. Cara, isso reduz o código repetitivo de um jeito que você não tem noção. É menos "copia e cola" e mais segurança. Apresentadora: Massa demais! Isso dá uma elegância para a API que o Go não tinha, né? Fica mais intuitivo. Mas ó, mudando um pouco de assunto, tem outra coisa que eu vi no changelog que me fez vibrar: UUID nativo! Rafael, finalmente, né? Quantas vezes a gente já não teve que dar um `go get` em bibliotecas de terceiros só pra gerar um ID único? Convidado: Nem me fale, Ju! Acho que todo projeto Go no planeta tem o `google/uuid` ou o `satori/go.uuid` como dependência. Não que sejam ruins, pelo contrário, são ótimas. Mas o UUID é algo tão fundamental hoje em dia, principalmente em arquiteturas de microserviços, que era estranho não ter na biblioteca padrão. Apresentadora: E agora ele vem em qual pacote? Já temos o nome oficial? Convidado: Tudo indica que vai ser algo como `crypto/uuid`. E o legal é que ele já nasce completo. Vai ter geração de V4, que é o aleatório que todo mundo usa, e também o V5, que é baseado em nome e namespace. Além disso, o parsing de string pra UUID e a comparação entre eles vão ser nativos. Isso é sensacional para a segurança, porque agora a implementação é auditada pelo próprio time do Go. Menos uma dependência externa pra gente se preocupar com vulnerabilidades ou manutenção. Apresentadora: É o que a gente sempre fala, né? "Standard library" forte é sinônimo de ecossistema saudável. E falando em biblioteca padrão, Rafael, o que é esse `encoding/json/v2`? O pessoal resolveu reescrever o motor de JSON do Go do zero? Convidado: Foi exatamente isso. O pacote de JSON atual é um dos pilares do Go, mas ele é antigo, né? Ele usa muito "reflection", o que acaba pesando na performance e na alocação de memória em aplicações que processam muitos dados. O `v2` é uma tentativa — muito bem-sucedida, aliás — de modernizar isso. Eles focaram em performance pura e em conformidade total com os padrões JSON mais rigorosos. Apresentadora: Mas e aí, vai quebrar o código de todo mundo? Como fica a compatibilidade? Convidado: Essa é a pergunta de um milhão de dólares! (risos). O time do Go é muito cuidadoso com isso. Por isso eles estão lançando como `v2`. Eles vão coexistir por um bom tempo. Você vai poder migrar aos poucos. A API do `v2` é um pouco mais flexível, te dá mais controle sobre como o dado é transformado, o tal do marshaling. Mas, tipo assim, a ideia é que se você precisa de performance extrema e menos pressão no Garbage Collector, o `v2` vai ser o seu melhor amigo. Apresentadora: Caramba, Rafael, é muita novidade técnica que mexe no dia a dia do desenvolvedor. Se você tivesse que dar um conselho pra quem tá ouvindo a gente agora e usa Go em produção, qual seria? Já dá pra sair usando esse RC? Convidado: Olha, o Release Candidate é pra testar, né? Eu não jogaria num sistema crítico de cara, mas eu recomendo fortemente baixar, rodar os seus testes atuais com o Go 1.27 RC e ver se algo quebra. E, principalmente, começar a brincar com esses métodos genéricos. Eles vão abrir portas para padrões de design que a gente simplesmente não conseguia fazer antes de forma limpa. É um momento de reaprender algumas coisas e simplificar outras. Apresentadora: Perfeito! É aquela coisa, né: o Go continua simples, mas agora ele está ficando mais potente. Rafael, cara, valeu demais pelo papo. Foi muito esclarecedor! Convidado: Eu que agradeço, Ju! Sempre um prazer. E galera, bora testar o Go 1.27, porque o futuro da linguagem tá bem bonito. Valeu!

Tags

Go Golang backend generics json uuid standard library