não é possível baixar, $ GOPATH não definido

150

Quero instalar o json2csv usando, go get github.com/jehiah/json2csvmas recebo este erro:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

Alguma ajuda sobre como corrigir isso no MacOS?

Mona Jalal
fonte
3
Estou tendo o mesmo problema com um pacote diferente (filhote). Vamos, mantenedores do Go, faça um instalador (OS X) que finalize o trabalho! O instalador do OS X para Node é um ótimo exemplo. O uso do Nó não requer etapas adicionais de instalação manual. Isso simplesmente funciona. Espero que as versões futuras do instalador Go sejam melhores.
precisa saber é o seguinte

Respostas:

140

[Atualização: a partir do Go 1.8, o GOPATHpadrão é $HOME/go, mas você ainda pode achar isso útil se quiser entender o GOPATHlayout, personalizá-lo etc.]

O site oficial da Go discute GOPATH e como criar um diretório de espaço de trabalho .

export GOPATH="$HOME/your-workspace-dir/"- execute-o no seu shell e adicione-o ~/.bashrcou equivalente para que seja definido para você no futuro. Go irá instalar pacotes sob src/, bin/e pkg/, subdiretórios lá. Você vai querer colocar seus próprios pacotes em algum lugar $GOPATH/src, como $GOPATH/src/github.com/myusername/se você quiser publicar no GitHub. Provavelmente você também precisará do export PATH=$PATH:$GOPATH/binseu .bashrcpara poder executar programas compilados em $GOPATH.

Opcionalmente, via Rob Pike , você também pode definir CDPATHpara que seja mais rápido cdempacotar dirs no bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xsignifica que você pode digitar em cd net/htmlvez de cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick observa que você pode definir GOPATH=$HOMEpara colocar Go src/, pkg/e bin/diretórios bem debaixo do seu homedir. Isso pode ser bom (por exemplo, você já deve ter $HOME/binno seu caminho), mas é claro que algumas pessoas usam vários espaços de trabalho, etc.

twotwotwo
fonte
Obrigado pela informação. Você precisa alterar seu espaço de trabalho para cada projeto individual?
Doug Molineux
1
Em geral, não, você pode usar um espaço de trabalho que src/contenha, por exemplo, github.com/youruser/xe github.com/youruser/y. Isto é o que eu faço. As pessoas podem ter seus motivos para agir de outra forma (política da empresa para manter projetos separados?), Mas não posso falar sobre isso.
twotwotwo
3
$ GOPATH está definido, mas "não é possível fazer o download, $ GOPATH não está definido. Para obter mais detalhes, consulte: vá ajudar gopath" aparece assim mesmo.
Tyguy7
Qual plataforma (Windows ou Linux / OS X / outro Unix)? Se não for o Windows, o que echo $GOPATHdiz? Pode valer a pena postar como uma pergunta separada; parece que você está em uma situação incomum, e depurar os comentários pode ser complicado.
twotwotwo
2
@ Tyguy7 chances de você não exportter; execute /bin/bash -c "echo \$GOPATH"para verificar se os subprocessos podem ver $GOPATH; se Echos esvaziar, em seguida, executar export GOPATHe depoisgo get ...
sanmai
33

Usando fermentação

Eu instalei usando brew.

$ brew install go

Quando estiver pronto, se você executar este comando brew, ele mostrará as seguintes informações:

$ brew info go
go: stable 1.4.2 (bottled), HEAD
Go programming environment
https://golang.org
/usr/local/Cellar/go/1.4.2 (4676 files, 158M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb
==> Options
--with-cc-all
    Build with cross-compilers and runtime support for all supported platforms
--with-cc-common
    Build with cross-compilers and runtime support for darwin, linux and windows
--without-cgo
    Build without cgo
--without-godoc
    godoc will not be installed for you
--without-vet
    vet will not be installed for you
--HEAD
    Install HEAD version
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin

As peças importantes existem estas linhas:

/usr/local/Cellar/go/1.4.2 (4676 arquivos, 158M) *

exportar PATH = $ PATH: / usr / local / opt / go / libexec / bin

Configurando o ambiente do GO

Isso mostra onde o GO foi instalado. Precisamos fazer o seguinte para configurar o ambiente do GO:

$ export PATH=$PATH:/usr/local/opt/go/libexec/bin
$ export GOPATH=/usr/local/opt/go/bin

Você pode verificar usando GO para ver se está configurado corretamente:

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/opt/go/bin"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.4.2/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Configurando o json2csv

Parece bom, então vamos instalar json2csv:

$ go get github.com/jehiah/json2csv
$

O que acabou de acontecer? Ele instalou. Você pode verificar assim:

$ $ ls -l $GOPATH/bin
total 5248
-rwxr-xr-x  1 sammingolelli  staff  2686320 Jun  9 12:28 json2csv

OK, então por que não consigo digitar json2csvmeu shell? Isso ocorre porque o /bindiretório abaixo $GOPATHnão está no seu $PATH.

$ type -f json2csv
-bash: type: json2csv: not found

Então, vamos adicioná-lo temporariamente:

$ export PATH=$GOPATH/bin:$PATH

E verifique novamente:

$ type -f json2csv
json2csv is hashed (/usr/local/opt/go/bin/bin/json2csv)

Agora está lá:

$ json2csv --help
Usage of json2csv:
  -d=",": delimiter used for output values
  -i="": /path/to/input.json (optional; default is stdin)
  -k=[]: fields to output
  -o="": /path/to/output.json (optional; default is stdout)
  -p=false: prints header to output
  -v=false: verbose output (to stderr)
  -version=false: print version string

Adicione as modificações que fizemos $PATHe $GOPATHao seu $HOME/.bash_profilepara fazê-las persistir entre as reinicializações.

slm
fonte
18

Assista um video

Em geral, eu sempre recomendo este vídeo oficial do Go para obter uma visão geral rápida do assunto:

http://www.youtube.com/watch?v=XCsL89YtqCs

É mais fácil ser mostrado do que ser informado.

@jwfearn parafraseou a parte importante do vídeo:

export GOPATH="${HOME}/gocode"; export PATH="${PATH}:${GOPATH}/bin"; mkdir -p "${GOPATH}"

0x434D53
fonte
2
Excelente vídeo introdutório - eu sempre entendo melhor quando é mostrado para mim.
Joshua Pinter
3
Obrigado @jwfearn - os vídeos são para música e outros entretenimentos; Não é possível copiar e colar a partir deles :-)
kguest
5

Achei mais fácil fazer assim:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
João Fernandes
fonte
3

Para o MAC, isso funcionou bem para mim.

sudo nano /etc/bashrc

e adicione o abaixo no final do arquivo

export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=/usr/local/opt/go/bin

Isto deve resolver o problema. Tente abrir um novo terminal e ecoe $ GOPATH, você deve ver o valor correto.

Shasti
fonte
2

(para MAC)

Tentei todas essas respostas e, por alguma razão ainda desconhecida, nenhuma delas funcionou.

Eu tive que "forçar a alimentação" do GOPATH definindo a variável de ambiente para cada comando que exigisse. Por exemplo:

sudo env GOPATH=$HOME/goWorkDirectory go build ...

Even glideestava me dando oGOPATH not set erro. Resolvi, novamente, por "alimentação forçada": tentei todas essas respostas e, por alguma razão ainda desconhecida, nenhuma delas funcionou.

Eu tive que "forçar a alimentação" do GOPATH definindo a variável de ambiente para cada comando que exigisse.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Espero que isso ajude alguém.

Zephel
fonte
2

Você $GOROOTnão deve estar configurado. Você $GOPATHdeve estar definido $HOME/godigitandoexport $GOPATH=$HOME/go

Digite export GOROOT=""para corrigir seu problema.

julien bouteloup
fonte
1

Apenas faça export GOPATH="/whatever/you/like/your/GOPATH/to/be".

Volker
fonte
4
Se eu sou um noob, ainda não sei "onde gostaria que meu GOPATH estivesse". IMHO é uma chatice que não exista um comportamento GOPATH padrão que possa ser substituído por uma variável de ambiente.
jwfearn
0

Se você se deparar com esse problema após a $GOPATHconfiguração, pode ser porque o está executando com um shell não suportado. Eu estava usando fishe não funcionou, iniciá-lo com bashfuncionou bem.

Julien Fouilhé
fonte
0

Você pode usar a solução "export" exatamente como o que outros caras sugeriram. Gostaria de fornecer outra solução para conveniência permanente: você pode usar qualquer caminho como GOPATH ao executar os comandos Go.

Primeiramente, você precisa baixar uma pequena ferramenta chamada gost: https://github.com/byte16/gost/releases . Se você usa o ubuntu, pode baixar a versão linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Então você precisa executar os comandos abaixo para descompactá-lo:

$ cd /path/to/your/download/directory 
$ tar -xvf gost_linux_amd64.tar.gz

Você obteria um executável gost. Você pode movê-lo /usr/local/binpara um uso conveniente:

$ sudo mv gost /usr/local/bin

Execute o comando abaixo para adicionar o caminho que você deseja usar como GOPATH no espaço de caminho gost mantém. É necessário dar ao caminho um nome que você usaria posteriormente.

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

Execute qualquer comando Go desejado no formato:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

Por exemplo, você deseja executar go get github.com/go-sql-driver/mysqlcom /home/foobar/barcomo o GOPATH, apenas fazê-lo como abaixo:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

Ajudaria você a definir o GOPATH e executar o comando. Mas lembre-se de que você adicionou o caminho no espaço gostde caminhos do . Se você estiver em qualquer nível de subdiretórios de /home/foobar/bar, você pode simplesmente executar o comando abaixo, que faria o mesmo em breve:

$ gost get -- github.com/go-sql-driver/mysql

gosté uma ferramenta simples de Go, que pode ajudá-lo a gerenciar GOPATHs e executar comandos Go. Para mais detalhes sobre como usá-lo para executar outros comandos Go, você pode simplesmente executar gost help goCmdName. Por exemplo, você deseja saber mais install, basta digitar as palavras abaixo em:

$ gost help install

Você também pode encontrar mais detalhes no README do projeto: https://github.com/byte16/gost/blob/master/README.md

Franco
fonte
0

Execute 'go env' e veja para onde seu GOPATH está apontando. Se você mudar para esse diretório, seu comando 'go get..etc' deve funcionar.

Alexander Leon
fonte
0

Esse problema me ocorreu no raspberry pi. Eu havia efetuado login através do cliente VNC O problema persistiu apesar de configurar e exportar o GOPATH. Em seguida, executou o comando "vá buscar" sem o sudo e funcionou perfeitamente.

mtamboli
fonte
-1

Eu tive que executar um aplicativo como root (para abrir um servidor web na porta 80), isso produziu o erro para mim, porque o usuário sudo tem um ambiente diferente do usuário normal, portanto, GOPATH não foi definido.

Se alguém tiver esse problema, adicione -Eao comando, isso preservará o ambiente do usuário.

sudo -E go run main.go

Para mais informações, consulte a discussão aqui: Grupos do Google - Problema GOPATH

Pwdr
fonte
Não sei por que isso foi downvoted, mas fixa-lo para mim ...
Pwdr