Conhecendo os ambientes GoRoot e GoPath
Atenção, eu tenho um recado super importante para você! 🤓
A partir deste ponto em diante, estamos entrando na seção de fundamentos da linguagem GoLang, portanto... certifique-se de que você:
Feito isso, vamos aprender um pouco mais sobre esses dois ambientes do Go!
Variáveis de Ambiente em Go
É importante que desde já, você tenha conhecimento de duas variáveis de ambiente da linguagem do GoLang, os famosos GoRoot e GoPath.
Variáveis estas que irão te acompanhar em alguns pontos da sua jornada como desenvolvedor.
Mas antes, eu tenho uma pequena pergunta para te fazer: você sabe o que é uma variável de ambiente? 🙃
Uma variável de ambiente nada mais é do que um valor dinâmico (e que pode ser alterado) armazenado no sistema operacional (ou na pasta dos arquivos do projeto), e que pode ser acessado por meio de aplicações e processos que estão em execução no sistema operacional.
Imagine variáveis de ambiente como um grande mural que está localizado na parede do seu quarto, onde qualquer pessoa que tenha acesso ao seu quarto, consiga consultar/alterar as informações ali existentes.
📌 Vejamos alguns exemplos comuns de variáveis de ambiente que existem em alguns sistemas operacionais:
PATH
: É uma lista de diretórios onde o sistema busca os executáveis.HOME
: Disponível em sistemasLinux
eMac
, é o local do diretório do usuário.TEMP
: Caminho para os arquivos temporários usados pelo sistema.DATABASE_URL
: Nomenclatura muito usada em aplicações que fazem conexões com bases de dados.
Agora você deve estar se perguntando... Por que devemos usar variáveis de ambiente?
E a resposta é simples, com elas nós evitamos expor credenciais importantes no nosso código fonte, além de envolver algumas outras questões como portabilidade e flexibilidade (transitar esses valores entre sistemas diferentes).
Dito isso, vamos focar nas variáveis de ambiente da linguagem GoLang!
Se você abrir o seu terminal (prompt de comando) e digitar o seguinte comando:
go env
Será retornado uma lista contendo todas as variáveis de ambiente que foram configuradas por padrão no Go:

Começando pelo GoRoot, ele é uma variável que armazena o caminho onde os arquivos de instalação do GoLang foram salvos, ou seja, é o local onde contém todos os arquivos da linguagem GoLang.
Lá, você irá encontrar todos os arquivos que a linguagem precisa para ser executada na sua máquina.
Além dele, temos a variável GoPath, que costuma armazenar os seus projetos feitos em GoLang. Ele também é chamado de Workspace.
Agora, se você deseja visualizar uma variável específica, basta digitar go env
+ NOME-DA-VARIÁVEL
, como por exemplo:
go env GOROOT
go env GOPATH
Explorando seu Workspace
Anteriormente, nós conhecemos a variável GoPath
, que tem o objetivo de armazenar os nossos projetos que foram feitos em Go, mas que tal darmos uma olhadinha no que tem dentro daquela pasta? 😊
- go
- bin
- pkg
- src
- go (Depois do Go 1.18+, essa pasta pode não existir)
Observação: como essa é a sua primeira vez em que você está criando aplicações em Go, é bem provável que essa pasta esteja VAZIA, mas a medida em que você for trabalhando com a linguagem, tais pastas poderão surgir de forma natural.
Começando pela pasta bin, é o local onde você poderá encontrar todos os executáveis que foram compilados dos pacotes. Por exemplo, se você instalar um determinado pacote no seu projeto:
go install github.com/foo/bar@latest
O executável deste pacote será salvo dentro dessa pasta.
Na pasta pkg, nós iremos encontrar todos os arquivos binários compilados (.a
) dos pacotes que não são programas executáveis, mas sim bibliotecas que serão usadas em nossos projetos.
Essa pasta possui um nome bem específico, também conhecido como cache de compilação. E só pelo nome, já dá pra imaginar que ali dentro você pode encontrar todos os pacotes que foram compilados anteriormente!
Você se lembra que durante a introdução, eu cheguei a mencionar que o Go possui a capacidade de melhorar a velocidade de recompilação dos pacotes que já foram compilados?
Então, é nessa pastinha que eles ficam salvos 🙂
Por fim, não menos importante, temos a pasta src, que é o local onde ficam armazenados os arquivos-fonte do Go (que levam a extensão .go
).
Antes do Go Modules (go mod init), o código era organizado dentro da pasta src/ em caminhos completos, como por exemplo:
GOPATH/src/github.com/user/meuprojeto/
Hoje em dia, com a chegada dos módulos (famosos arquivos go.mod
), não é mais necessário manter tudo dentro do GOPATH/src/
.
Mas fique tranquilo que posteriormente nós iremos entrar nesses outros assuntos, ok?
Todos os projetos que eu criar em GoLang, eles precisam existir dentro dessa pasta?
Não, você tem a liberdade de criar projetos em GoLang aonde você quiser e onde bem entender (na sua área de trabalho por exemplo...). Porém, a linguagem Go já deixa uma pasta padrão para isso.
Criando, Atualizando e Removendo variáveis de ambiente no sistema operacional
Apesar desse assunto ser um pouco irrelevante mediante ao nível de conhecimento que eu acredito que você tenha em Go.
Creio que o assunto que irei discursar agora seja mais um "dejavu" de algo que você pode precisar mais pra frente.
E sim, o processo de criação de variáveis de ambiente, é algo que todo desenvolvedor precisa saber, pois um dia isso poderá ser requisitado.
💡 Dica: criar uma variável de ambiente com um determinado valor, e posteriormente criar uma outra variável de ambiente com o mesmo nome, mas com valor diferente, é considerado uma atualização.
Criando uma variável no Linux/macOS
Com o seu terminal aberto, basta digitar o seguinte comando:
export MEU_AMBIENTE="Desenvolvimento"
Ali em cima, acabamos de criar uma variável chamada MEU_AMBIENTE
, cujo valor armazenado será Desenvolvimento.
Se quiser torná-la permanente, adicione essa linha no final dos arquivos ~/.bashrc
, ~/.bash_profile
ou ~/.zshrc
do seu linux.
Criando uma variável no Windows
Já no Windows, você pode fazer isso da seguinte forma:
set MEU_AMBIENTE=Desenvolvimento
Ou caso você esteja usando o PowerShell:
$env:MEU_AMBIENTE = "Desenvolvimento"
Para torná-la permanente no Windows, vá até: Configurações > Sistema > Informações do sistema > Configurações avançadas > Variáveis de ambiente, e faça as devidas alterações.
Deletando variáveis de ambiente
Para deletar uma variável de ambiente (cuidado ao fazer isso, pois alguns programas dependem delas e podem parar de funcionar corretamente), basta digitar o seguinte comando no seu terminal:
os.Unsetenv("MEU_AMBIENTE")
O código acima irá remover a variável cujo nome é MEU_AMBIENTE
.
Manipulando as variáveis de ambiente do GoLang
Anteriormente, você aprendeu a manipular as variáveis de ambiente do seu próprio sistema operacional.
Mas será que é possível modificar, criar e remover variáveis do próprio Go?
E a resposta é SIM, vejamos como isso pode ser feito 😉
Listando variáveis do GoLang
Para ver todas as variáveis disponíveis no ambiente Go, você pode executar o seguinte comando no seu terminal:
go env
O comando acima irá listar as variáveis, da seguinte forma:
GOPATH="/home/user/go"
GOCACHE="/home/user/.cache/go-build"
GOOS="linux"
GOARCH="amd64"
...
Se você deseja visualizar apenas uma única variável específica, basta digitá-la dessa forma:
go env GOPATH
Que o resultado será mostrado de maneira automática no terminal:
"/home/user/go"
Criando ou alterando variáveis
É com o comando go env -w
, que você será capaz de alterar ou criar uma variável de ambiente em Go, vejamos um exemplo:
go env -w GO_ROLL=MICILINI
O comando acima, é responsável por criar uma nova chave chamada GO_ROLL
, cujo valor é MICILINI
.
Entretanto, você pode alterar variáveis já existentes, observe:
go env -w GOPATH="$HOME/meu_go"
go env -w GO111MODULE=on
go env -w GO_ROLL=MICILINI_ROLL
Observe que no comando acima, nós estamos alterando o valor da variável GO_ROLL
, na qual já tínhamos configurado anteriormente.
Removendo variáveis de ambiente
Para remover uma variável e restaurá-la ao valor padrão, use go env -u
:
go env -u GOPATH
Agora, se você rodar o comando go env GOPATH
, verás que seu valor voltou ao valor original.
O que é um Workspace em GoLang?
Com a chegada da versão 1.18 do GoLang, ela trouxe consigo o conceito de Workspace, que foi feito para facilitar o desenvolvimento de projetos que dependem de múltiplos módulos.
É graças ao Workspace, que seus projetos feitos em Go agora podem compartilhar múltiplos módulos de forma simultânea, sem a necessidade de instalar ou publicar um pacote remotamente.
Antes do advento do Workspace, se você tivesse múltiplos módulos em seu projeto, você precisaria configurá-los manualmente em caminhos no replace
dentro do go.mod
.
Agora, com um workspace, você pode gerenciar vários módulos locais de forma centralizada.
Sendo assim, podemos dizer que um Workspace trouxe consigo os seguintes benefícios:
✅ Facilita o desenvolvimento multi-módulo: Você pode trabalhar com várias dependências locais sem precisar publicar pacotes.
✅ Elimina a necessidade de replace no go.mod: Antes, para usar pacotes locais, você precisava adicionar replace
, o que não é mais necessário.
✅ Mantém a compatibilidade com módulos: Workspaces não substituem módulos, apenas facilitam o gerenciamento de vários módulos simultaneamente.
Para que você possa entender na prática o que é um Workspace, vamos imaginar que você está desenvolvendo dois módulos:
/projeto
├── go.work
├── moduloA/
│ ├── go.mod
│ ├── main.go
│ └── ...
├── moduloB/
│ ├── go.mod
│ ├── utils.go
│ └── ...
Se o moduloA precisar importar algo de moduloB, ele pode fazer isso diretamente sem precisar usar caminhos absolutos, ou publicar moduloB em um repositório online.
Sendo assim, basta que você faça a importação desse módulo de forma simples:
import "moduloB/utils"
E o Go saberá de forma automática que moduloB está dentro do Workspace, por que? Porque ele vai procurar primeiro lá, antes de tentar achar um repositório online 😆
E se eu quiser criar um novo Worspace fora dessa pasta, eu posso?
Sim, o GoLang te permite criar diversos Wokspaces diferentes, até mesmo fora dessa estrutura que acabamos de conhecer, e eles não precisam estar limitados à estrutura do $GOPATH
.
Mas fique tranquilo que teremos uma lição dedicada a Workspaces, módulos e bibliotecas, portanto, não se assuste se você ainda não estiver entendendo nada rs
Conclusão
Nesta lição, você aprendeu um pouco mais sobre o que são variáveis de ambiente, e como funcionam as variáveis de ambiente em GoLang, juntamente em como criá-las, atualizá-las e removê-las.
Além disso, aprendeu um pouco mais sobre as variáveis GoPath
, GoRoot
, junto com os famosos Workspaces.
Até a próxima lição! 🙂