Quais devem ser os valores de GOPATH e GOROOT?

323

Estou tentando instalar o doozer assim:

$ goinstall github.com/ha/doozer

Eu recebo esses erros.

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally
jshen
fonte
3
@Motin no link acima não é mais válido
Jorrit Reedijk
O arquivo ficou obsoleto para o projeto. Um problema relacionado ao OSX é encontrado aqui: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin
Nota: por padrão, GOPATHserá definido para você no Go 1.8 (2017). Veja minha resposta abaixo
VonC 25/16/16
Sim, eu achei isso confuso também, a maneira como os godocs estão organizados. Isso ajudou: albertech.blogspot.com/2017/01/…
jar
1
@BenyaminJafari porque goinstallé realmente antiga pré-GO1 e não existe desde 2012.
Dave C

Respostas:

310

GOPATHé discutido na cmd/godocumentação :

A GOPATHvariável de ambiente lista lugares para procurar o código Go. No Unix, o valor é uma sequência separada por dois pontos. No Windows, o valor é uma sequência separada por ponto e vírgula. No plano 9, o valor é uma lista.

GOPATH deve ser configurado para obter, criar e instalar pacotes fora da árvore Go padrão.

GOROOTé discutido nas instruções de instalação :

As distribuições binárias Go assumem que elas serão instaladas no /usr/local/go(ou c:\Gono Windows), mas é possível instalar as ferramentas Go em um local diferente. Nesse caso, você deve definir a GOROOTvariável de ambiente para apontar para o diretório em que foi instalada.

Por exemplo, se você instalou o Vá para o diretório inicial, adicione os seguintes comandos a $HOME/.profile:

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

Nota: GOROOT deve ser definido apenas ao instalar em um local personalizado.

(versão atualizada da resposta de Chris Bunch .)

pje
fonte
44
Informações muito mais abrangentes sobre o GOPATH estão em Como escrever o código Go. É necessária uma compreensão das informações necessárias para entender o gocomando, essencial para trabalhar com o Go. Por exemplo, o uso de goinstallno OP agora deve ser go get.
Sonia
13
Observe também o caminho de instalação real do go. Por exemplo, em uma configuração padrão de homebrew, o homebrew instalará go /usr/local/Cellar/go/. Nesse caso, o caminho de exportação deve ser definido com export GOROOT=/usr/local/Cellar/go/{version}e export PATH=$PATH:$GOROOT/bin.
precisa saber é o seguinte
10
Eu tinha que fazer export GOROOT=/usr/local/Cellar/go/1.2/libexec/para que o meu trabalhasse com cerveja.
Steven Soroka
Não posso sugerir esta edição porque o aplicativo reclama que minha edição "parece conter" código não formatado (o que não ocorre; muito obrigado), mas:
Curinga
A partir do Go 1.10, se o GOROOT estiver desativado, a ferramenta go tentará descobrir isso por seu próprio local. Também não consigo colar o link porque colar não funciona no aplicativo iOS do Stack Exchange. Muito frustrado agora.
Curinga
97

Aqui está uma configuração simples:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH são definidos da seguinte forma:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Então, resumindo:

O GOROOT é para compilador / ferramentas provenientes da instalação go.
GOPATH é para seus próprios projetos go / bibliotecas de terceiros (baixado com "go get").

EvgenijM86
fonte
Eu acho que essa resposta é mais fácil de entender, pois existe um mapeamento na estrutura da pasta.
H-rai
O GOPATH inclui árvores de projeto inteiras (por exemplo, git) com arquivos que não são utilizados, como imagens, scripts, arquivos de construção etc.?
Serge Merzliakov
52

Primeira corrida go env.
Se você perceber que a instalação não está instalada, é possível instalá-la via homebrewou via pacote e / ou outras formas.
Se você estiver vendo saída, o seu Goestá instalado.
Ele mostra todos os envs definidos e não são.

Se você vir vazio para GOROOT:

  1. Executar which go(no meu computador /usr/local/go/bin/go:)
  2. exportar assim export GOROOT=/usr/local/go

Se você vir vazio para GOPATH:

  1. Crie qualquer diretório em qualquer lugar do seu computador para ir a projetos no meu caso: ~/GO_PROJECTS
  2. Então export GOPATH=~/GO_PROJECTS
РАВИ
fonte
2
which gofez isso por mim. Ele estava usando outro local de instalação go de uma instalação anterior usando Chocolatey. Excluiu essa pasta e a removeu da variável PATH. Agora funciona. Obrigado!
Sgarg
which gocomando não funcionou para mim no Windows 7. Como posso encontrar onde eu deveria executar este comando
firstpostcommenter
O comando correspondente janelas é where goque irá mostrar-lhe o caminho do arquivo executado
Falco
export GOPATH=~/GO_PROJECTSfez trabalho
Thamaraiselvam
39

GOPATHé discutido aqui :

A GOPATHvariável de ambiente

GOPATH pode ser definido como uma lista de caminhos separados por dois pontos dentro dos quais o código Go, objetos de pacote e executáveis ​​podem ser encontrados.

Defina a GOPATHpara usar goinstall para criar e instalar seu próprio código e bibliotecas externas fora da árvore Go (e para evitar escrever Makefiles).

E GOROOTé discutido aqui :

$GOROOTA raiz da árvore Go, frequentemente $HOME/go. O padrão é o pai do diretório em que all.bashé executado. Se você optar por não definir $GOROOT, execute gomake em vez de make ou gmake ao desenvolver programas Go usando os makefiles convencionais.

Chris Bunch
fonte
então se eu for instalado em ~ / projects / go, quais devem ser os valores da variável para encontrar os, fmt, etc?
Jshen #
2
Então, onde o Go instala quando você sudo apt-get install golang?
Weberc2
9
@ weberc2 se você executar go envvocê deve ver essa informação, para mim foi/usr/lib/go/
Andre
19

Eu li os go help gopathdocumentos e ainda estava incrivelmente confuso, mas encontrei essa pequena pepita de outra página do go doc:

A variável de ambiente GOPATH especifica a localização do seu espaço de trabalho. É provavelmente a única variável de ambiente que você precisará definir ao desenvolver o código Go.

http://golang.org/doc/code.html#GOPATH

Máx.
fonte
10

O GOPATH não deve apontar para a instalação do Go, mas para o seu espaço de trabalho (consulte https://golang.org/doc/code.html#GOPATH ). Sempre que você instala algum pacote com a instalação ir buscar ou ir, ele vai parar no GOPATH. É por isso que avisa que você definitivamente não deseja que pacotes aleatórios da Internet sejam despejados em sua instalação oficial.

arganzheng
fonte
9

A partir do go 1.8 (Q2 2017), o GOPATH será definido para você por padrão como $ HOME / go

Veja a edição 17262 e o comentário de Rob Pike:

$HOME/goserá.
Não existe uma melhor resposta, mas é curta e agradável, e pode ser um problema escolher esse nome se ele $HOME/gojá existir, o que agradará apenas os especialistas que já foram instalados e entenderão GOPATH.

VonC
fonte
Como um tópico tão simples pode se tornar tão complexo! Obrigado pela melhor resposta aqui.
precisa saber é o seguinte
@dodgy_coder Na verdade ... olhe as duas primeiras linhas da minha outra resposta: stackoverflow.com/a/37905102/6309 ;) Isso pode acabar sendo ainda mais simples: sem mais GOPATH! Mais detalhes em stackoverflow.com/a/48914523/6309 .
VonC 19/04
sim, eu concordo, GOPATH não é realmente necessário se você seguir o padrão, está correto? Eu precisava configurá-lo de qualquer maneira, porque era necessário para o ambiente de desenvolvimento do Google App Engine (Go Standard). Na verdade, eles dizem para você definir o GOPATH, mas não informam qual valor deve ser definido como ..!
Dodgy_coder 20/04/19
@dodgy_coder Sim, por padrão, o Go procurará o PATH do projeto em um valor predeterminado fixo.
VonC
6

Como acima mencionado:

A variável de ambiente GOPATH especifica a localização do seu espaço de trabalho.

Para o Windows , isso funcionou para mim (na janela Ms-dos):

set GOPATH=D:\my_folder_for_go_code\

Isso cria uma variável GOPATH que Ms-dos reconhece quando usada da seguinte maneira:

cd %GOPATH%
Timothée HENRY
fonte
3

Em relação GOROOTespecificamente, o Go 1.9 irá defini-lo automaticamente para o caminho da instalação.
Mesmo se você tiver vários Go instalados, chamar o 1.9.x que será definido GOROOTcomo /path/to/go/1.9(antes, se não estiver definido, assumiu um caminho padrão como /usr/local/goouc:\Go ).

Veja CL Go Review 53370 :

O go toolagora usará o caminho do qual foi chamado para tentar localizar a raiz da árvore de instalação do Go .
Isso significa que, se toda a instalação do Go for movida para um novo local, ogo tool continuará funcionando normalmente.

Isso pode ser superado pela configuração GOROOTno ambiente, o que deve ser feito apenas em circunstâncias incomuns.
Observe que isso não afeta o resultado da runtime.GOROOT()função , que continuará relatando o local da instalação original; isso pode ser corrigido em versões posteriores.

VonC
fonte
0

A partir de 2020 e Go versão 1.13 ou superior, no Windows, a melhor maneira de atualizar o GOPATH é apenas digitar no prompt de comando:

setx GOPATH C:\mynewgopath
Farshid
fonte
0

Aqui está uma solução (usuário único):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

goreclama se você mudar .gopathpara .go.

Eu gostaria que eles fossem com o rust/cargojeito que os caras fizeram e apenas colocaram tudo em um só lugar.

estilhaços
fonte
-1

no osx, eu instalei com o brew, aqui está a configuração que funciona para mim

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"
Edwin Ikechukwu Okonkwo
fonte
-1

Eu tive que acrescentar

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

ao meu ~ / .bash_profile no Mac OS X

Shammi Shailaj
fonte
-1

Também existe um caso em que, quando usamos go, ele compila todos os arquivos go.

Digamos que tínhamos um arquivo main.go e, posteriormente, alteramos o arquivo atual para main_old.go e adicionamos nosso novo arquivo main.go. Então, quando criarmos nosso aplicativo, todos os arquivos em andamento serão compilados. Portanto, o erro que está acontecendo pode ser devido a um erro de compilação em outros arquivos go.

Jino Jossy
fonte
-1

Após a instalação do Go lang, o GOROOT é o diretório raiz da instalação.

Quando explodi o binário Go Lang no diretório Windows C: \, meu GOROOT deve ser C: \ go. Se instalado com o instalador do Windows, pode ser C: \ Arquivos de Programas \ go (ou C: \ Arquivos de Programas (x86) \ go, para pacotes de 64 bits)

 GOROOT = C:\go

enquanto meu GOPATH é o local do código-fonte ou área de trabalho Go lang.

Se meu código fonte Go lang estiver localizado em C: \ Users \\ GO_Workspace, seu GOPATH seria o seguinte:

 GOPATH = C:\Users\<xyz>\GO_Workspace
Amit Kaneria
fonte
-1

Você não precisa definir explicitamente GOROOT(as versões modernas do Go podem descobrir por conta própria, com base no local do binário go que você executa).

Além disso, ocorreu o seguinte erro ao tentar trabalhar com vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

Removendo o GOROOT, atualizando o meu GOPATH e export GO111MODULE="on"resolvendo o problema.

GOPATH veja aqui

GOPATH pode ser definido como uma lista de caminhos separados por dois pontos dentro dos quais o código Go, objetos de pacote e executáveis ​​podem ser encontrados.

Defina um GOPATH para usar o goinstall para criar e instalar seu próprio código e bibliotecas externas fora da árvore do Go (e para evitar escrever Makefiles).

Effi Bar-She'an
fonte
-2

os valores devem ser (MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)
Diego Santa Cruz Mendezú
fonte
-3

Se você estiver usando a distribuição, aponte para onde estão os arquivos de inclusão, por exemplo:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(Isto é para o Fedora 20)

Breno Leitão
fonte