gvm vs asdf: gerenciando versões do Go
O gvm é um gerenciador de versões específico do Go com tratamento de GOPATH e pkgsets; o asdf gerencia Go junto de muitas outras linguagens via plugins.
O gvm foca somente no Go, instalando múltiplas versões do Go, gerenciando o GOPATH e oferecendo pkgsets para isolar dependências na era pré-modules. O asdf gerencia o Go por meio de um plugin e um arquivo .tool-versions compartilhado, unificando-o com Node, Python e outros. Com os Go modules agora padrão, boa parte da maquinaria extra do gvm importa menos, e o asdf (ou a toolchain oficial) cobre a maioria das necessidades.
| gvm | asdf | |
|---|---|---|
| Escopo | Só Go | Poliglota |
| GOPATH / pkgsets | Embutido | Não necessário (modules) |
| Arquivo de config | Específico do gvm | .tool-versions |
| Manutenção | Menos ativa | Ativa |
| Melhor para | Fluxos Go legados | Repos multilinguagem |
No CI
No CI, o Go é normalmente instalado via setup-go ou pelo asdf fixando uma única versão; os recursos de GOPATH e pkgset do gvm estão em grande parte obsoletos com os modules. O asdf mantém o Go fixado ao lado dos seus outros runtimes em um único arquivo, o que é mais limpo para pipelines poliglotas. O gvm só se encaixa se você mantém fluxos Go mais antigos.
Acelere
Faça cache da instalação do Go e do cache de modules com a chave baseada em go.sum. Ambos rodam em runners de CI; runners gerenciados mais rápidos encurtam as etapas de instalação, build e testes do Go.
O veredito
Manter projetos Go legados que dependem de GOPATH ou pkgsets: gvm. Gerenciar Go junto de outras linguagens em um repositório moderno baseado em modules: asdf (ou setup-go no CI). Para a maioria das equipes hoje, o asdf ou a toolchain oficial é a escolha mais simples.