Entendendo o GOPATH

Introdução

Este artigo irá guiá-lo através da compreensão do que é o GOPATH, como ele funciona, e como configurá-lo. Este é um passo crucial para configurar um ambiente de desenvolvimento Go, assim como entender como Go encontra, instala e constrói arquivos fonte. Neste artigo vamos usar o GOPATH quando nos referimos ao conceito da estrutura de pastas que vamos discutir. Usaremos $GOPATH para nos referirmos à variável de ambiente que Go usa para encontrar a estrutura de pastas.

A Go Workspace é como Go gerencia nossos arquivos fonte, binários compilados e objetos em cache usados para uma compilação mais rápida mais tarde. É típico, e também recomendado, ter apenas um Go Workspace, embora seja possível ter vários espaços. O GOPATH atua como pasta raiz de um espaço de trabalho.

Configurando a variável de ambiente $GOPATH

A variável de ambiente $GOPATH lista lugares para Go procurar por Go Workspaces.

Por padrão, Go assume que nossa localização GOPATH está em $HOME/go, onde $HOME é o diretório raiz de nossa conta de usuário em nosso computador. Podemos alterar isso definindo a variável de ambiente $GOPATH. Para mais estudos, siga este tutorial sobre leitura e configuração de variáveis de ambiente no Linux.

Para mais informações sobre como configurar a variável $GOPATH, consulte a documentação Go.

Outras informações, esta série percorre a instalação do Go e a configuração de um ambiente de desenvolvimento Go.

$GOPATH Não é $GOROOT

O $GOROOT é onde o código Go, compilador e ferramentas vivem – este não é o nosso código fonte. O $GOROOT é normalmente algo como /usr/local/go. Nosso $GOPATH é normalmente algo como $HOME/go.

Embora não precisemos mais configurar especificamente a variável $GOROOT, ela ainda é referenciada em materiais mais antigos.

Agora, vamos discutir a estrutura do Go Workspace.

Anatomia do Go Workspace

Inside of a Go Workspace, ou GOPATH, existem três diretórios: bin, pkg, e src. Cada um destes diretórios tem um significado especial para a cadeia de ferramentas Go.

.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go

Vamos dar uma olhada em cada um destes diretórios.

O diretório $GOPATH/bin é onde Go coloca os binários que go install compila. O nosso sistema operativo utiliza a variável de ambiente $PATH para encontrar aplicações binárias que possam ser executadas sem um caminho completo. É recomendado adicionar este directório ao nosso global $PATH variável.

Por exemplo, se não adicionarmos $GOPATH/bin a $PATH para executar um programa a partir daí, precisaríamos de correr:

  • $GOPATH/bin/myapp

Quando $GOPATH/bin é adicionado a $PATH podemos fazer a mesma chamada como tal:

  • myapp

O directório $GOPATH/pkg é onde o Go armazena ficheiros objecto pré-compilados para acelerar a compilação subsequente de programas. Tipicamente, a maioria dos desenvolvedores não precisarão acessar este diretório. Se você tiver problemas com a compilação, você pode apagar este diretório com segurança e Go irá reconstruí-lo.

O diretório src é onde todos os nossos arquivos .go, ou código fonte, devem ser localizados. Isto não deve ser confundido com o código fonte que a ferramenta Go usa, que está localizado no diretório $GOROOT. Ao escrevermos aplicações Go, pacotes e bibliotecas, vamos colocar esses arquivos em $GOPATH/src/path/to/code.

What Are Packages?

Go code is organised in packages. Um pacote representa todos os arquivos em um único diretório no disco. Um diretório pode conter apenas certos arquivos do mesmo pacote. Os pacotes são armazenados, com todos os arquivos fonte Go escritos pelo usuário, sob o diretório $GOPATH/src. Podemos entender a resolução dos pacotes importando diferentes pacotes.

Se nosso código vive em $GOPATH/src/blue/red então seu nome de pacote deve ser red.

A instrução de importação para o pacote red seria:

import "blue/red"

Pacotes que vivem em repositórios de código fonte, como GitHub e BitBucket, têm a localização completa do repositório como parte de seu caminho de importação.

Por exemplo, nós importaríamos o código fonte em https://github.com/gobuffalo/buffalo usando o seguinte caminho de importação:

import "github.com/gobuffalo/buffalo"

Então, este código fonte estaria na seguinte localização no disco:

$GOPATH/src/github.com/gobuffalo/buffalo

Conclusão

Neste artigo nós discutimos o GOPATH como um conjunto de pastas que Go espera que nosso código fonte viva dentro dele, assim como quais são essas pastas, e o que elas contêm. Discutimos como mudar essa localização do padrão de $HOME/go para a escolha do usuário definindo a variável de ambiente $GOPATH. Finalmente, discutimos como Go procura por pacotes dentro dessa estrutura de pastas.

Introduzido em Go 1.11, os módulos Go têm como objetivo substituir Go Workspaces e o GOPATH. Embora seja recomendado começar a usar módulos, alguns ambientes, como ambientes corporativos, podem não estar prontos para usar os módulos.

O GOPATH é um dos aspectos mais complicados de configurar o Go, mas uma vez configurado, geralmente podemos esquecê-lo.

Leave a Reply