Ganhe produtividade gerenciando as versões Go na sua máquina de forma simples usando o GVM
Introdução
A configuração de um ambiente de desenvolvimento Go pode ser um pouco confusa para quem está acostumado a trabalhar com outras linguagens. Quando estamos falando de versões do Go inferiores a 1.11, o cenário ainda pode se tornar mais chato devido suas peculiaridades (que não serão abordadas nesse momento, mas quem já precisou, sabe do que se trata).
Como de padrão no mundo Go, a documentação oficial traz uma solução que se mostra relativamente fácil, bem clara e objetiva; e que, inclusive, fala sobre a questão de ter mais de uma versão do Go instalada ao mesmo tempo.
veja mais sobre como configurar o seu ambiente na Documentação Oficial Golang
Mesmo assim, o gerenciamento é um trabalho manual que exige uma quantidade grande de passos e que tende a ficar mais complicada dependendo da quantidade de versões instaladas que você possui.
O chaveamento entre versões também pode ser um problema quando você possuir diferentes projetos no seu workspace que estejam em fases de maturidade diferentes. Se você tem projetos antigos em uma determinada versão, mas quer escrever um novo com uma versão mais atual, isso também pode ser um processo trabalhoso.
Pensando em diminuir essa complexidade e melhorar o gerenciamento de versões, surgiu o GVM.
Admito que me preocupo um pouco em escrever sobre uma ferramenta que não tem recebido commits recentes (enquanto escrevo esse texto, tem 1 ano desde o último commit), mas como ele ainda tem se mostrado uma ferramenta relativamente útil no meu dia-a-dia, prefiro apostar na recomendação.
Note que algumas outras linguagens já possuem ferramentas que fazem um trabalho similar. É o caso, por exemplo, do NVM para o gerenciamento de versões Node.JS.
Ambiente
É importante frisar antes de mais nada que estamos fazendo todo esse processo em um ambiente Linux. Mais precisamente para esse exemplo estamos utilizando a Versão 18.04.2 LTS do Ubuntu, mas já fiz o mesmo procedimento em um ambiente MacOS e funciona tão bem quanto.
Instalação
Para instalar execute o seguinte comando de acordo com o seu interpretador shell.
- Bash
$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
- ZSH
$ zsh < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Esse comando irá gerar uma .gvm dentro da sua home. Mo meu caso, a pasta foi criada em ~/.gvm
Restarte o terminal e execute o comando gvm version
para confirmar que a instalação foi efetuada com sucesso.
Eventualmente pode acontecer de algumas dependências não estarem instaladas. Por exemplo, no ambiente que estou usando como base para esse texto, ainda faltava instalar algumas dependências.
Com as dependências devidamente instaladas, executamos novamente o comando gvm version
e teremos o seguinte retorno.
Note que para que o comando gvm seja identificado pelo Sistema Operacional, uma nova linha foi adicionada dentro do seu arquivo bashrc.
Instalando Go
Agora vamos efetivamente instalar as versões que queremos ter como opções no nosso ambiente. Nesse caso, vamos instalar as versões 1.10 e a 1.11, sendo a última como nossa versão padrão. Para isso, basta executar os seguintes comandos:
$ gvm install go1.10 -B
$ gvm install go1.11 -B
Para a versão 1.11 como padrão, execute:
$ gvm use go1.11 --default
Para validar, liste as versões instaladas por meio do comando:
$ gvm list
Você terá o seguinte retorno
Feito isso já teremos nosso ambiente pronto para uso e as variáveis de ambiente $GOROOT e $GOPATH já foram configuradas automaticamente. Por padrão são definidos nos caminhos:
#GOPATH
~/.gvm/pkgsets/go1.11/global
#GOROOT
~/.gvm/gos/go1.11
Validando
Feito todo esse processo de instalação, a forma que usamos o Go no nosso ambiente não deve ser influenciada. Então vamos validar o que fizemos. Para isso, vamos criar um Hello.go com o seguinte código.
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
E aí está…. verificamos que a versão instalada é a que selecionamos e também que nosso código foi executado com sucesso.
Conclusão
Mesmo a documentação mostrando que pode ser relativamente simples manter mais de uma versão instalada ao mesmo tempo de forma “nativa”, gastar tempo configurando ambiente é uma coisa que ninguém gosta e o GVM se mostra eficiente nesse aspecto. Instalar uma nova versão e chavear entre elas se mostra uma tarefa muito menos custosa usando esse gerenciador de versões. E você, o que achou? Deixe seu comentário e até a próxima.
Gostou do GVM.? Leia mais detalhes na documentação oficial no Github
gvm
By Josh Bussdieker (jbuss, jaja, jbussdieker) while working at Moovweb
Currently lovingly maintained by Benjamin Knigge
Pull requests and other any other contributions would be very much appreciated.
GVM provides an interface to manage Go versions.
Features
- Install/Uninstall Go versions with
gvm install [tag]
where tag is "60.3", "go1", "weekly.2011-11-08", or "tip" - List added/removed files in GOROOT with
gvm diff
- Manage GOPATHs with
gvm pkgset [create/use/delete] [name]
. Use--local
asname
to manage repository under local path (/path/to/repo/.gvm_local
). - List latest release tags with
gvm listall
. Use--all
to list weekly as well. - Cache a clean copy of the latest Go source for multiple version installs.
- Link project directories into GOPATH
Background
When we started developing in Go mismatched dependencies and API changes plauged our build process and made it extremely difficult to merge with other peoples changes.
After nuking my entire GOROOT several times and…
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.