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

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 .)


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").


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

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.


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


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.


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.


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%

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.


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

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.


-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"

-1

Eu tive que acrescentar

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

ao meu ~ / .bash_profile no Mac OS X


-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.


-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

-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).


-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)

-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)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.