GOPATH e GOROOT: valores corretos e erros comuns
\n\nSe você está começando a aprender Go, mais cedo ou mais tarde vai se deparar com as siglas GOPATH e GOROOT. A pergunta "What should be the values of GOPATH and GOROOT?" é uma das mais populares no Stack Overflow, e não é à toa. Iniciantes se confundem, definem valores errados e acabam com erros estranhos na hora de compilar seus projetos.
Neste artigo, vamos explicar de forma simples para que servem essas variáveis, quais valores usar por padrão e como migrar para a abordagem moderna com go modules. Vamos nessa!
O que é GOROOT?
\n\nGOROOT é o caminho para a pasta onde o compilador Go foi instalado. Dentro dela estão os pacotes padrão (fmt, net, os, etc.), além dos binários go, gofmt e outras ferramentas.
A maioria dos desenvolvedores não precisa definir GOROOT explicitamente. Se você instalou o Go pelo instalador oficial ou gerenciador de pacotes, o compilador já sabe onde ele está.
\n\nComo verificar o valor atual do GOROOT?
\nAbra o terminal e execute:
\ngo env GOROOT\n\nExemplo de saída no Linux:
\n/usr/local/go\n\nNo Windows (se a instalação foi no local padrão):
\nC:\\Program Files\\Go\n\nQuando é necessário alterar o GOROOT?
\n- \n
- Se você moveu a pasta do Go para outro local. \n
- Se você tem várias versões do Go instaladas e quer alternar entre elas. \n
- Se você compilou o Go a partir do código-fonte e o instalou em um diretório personalizado. \n
Em todos os outros casos, deixe o GOROOT em paz — deixe o Go cuidar disso.
\n\nO que é GOPATH?
\n\nJá o GOPATH é uma variável bem mais interessante. Historicamente, o Go exigia que todo o seu código ficasse dentro de uma única área de trabalho. Essa área era definida pelo GOPATH.
Por padrão, o GOPATH aponta para:
- \n
- Linux/macOS:
$HOME/go\n - Windows:
%USERPROFILE%\\go\n
Dentro dessa pasta, a estrutura padrão é:
\ngo/\n├── bin/ # binários compilados\n├── pkg/ # arquivos objeto compilados e cache\n└── src/ # código-fonte dos seus projetos\n ├── github.com/\n │ └── usuario/\n │ └── meurepositorio/\n └── exemplo.com/\n └── minhaapp/\n\nComo verificar o valor atual do GOPATH?
\ngo env GOPATH\n\nQuais devem ser os valores de GOPATH e GOROOT? (Valores corretos)
\n\nAqui está a resposta direta para a pergunta principal:
\n\n| Variável | \nValor padrão (Linux/macOS) | \nValor padrão (Windows) | \n
|---|---|---|
GOROOT | \n /usr/local/go | \n C:\\Program Files\\Go | \n
GOPATH | \n $HOME/go | \n %USERPROFILE%\\go | \n
Importante: GOPATH e GOROOT devem ser pastas diferentes. Nunca defina ambas com o mesmo valor!
Erros comuns e como corrigi-los
\n\nErro 1: "GOPATH not set" ou "cannot find package"
\nSe você está usando a abordagem antiga (anterior às versões 1.11-1.13), o Go procura pacotes dentro de $GOPATH/src. Se você colocou seu projeto em outro local, o compilador não vai encontrá-lo.
Solução:
\n- \n
- Ou mova o projeto para
$GOPATH/src. \n - Ou