Quero instalar o json2csv usando, go get github.com/jehiah/json2csv
mas 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?
Quero instalar o json2csv usando, go get github.com/jehiah/json2csv
mas 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?
Respostas:
[Atualização: a partir do Go 1.8, o GOPATH
padrão é $HOME/go
, mas você ainda pode achar isso útil se quiser entender o GOPATH
layout, 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 ~/.bashrc
ou 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/bin
seu .bashrc
para poder executar programas compilados em $GOPATH
.
Opcionalmente, via Rob Pike , você também pode definir CDPATH
para que seja mais rápido cd
empacotar dirs no bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x
significa que você pode digitar em cd net/html
vez de cd $GOPATH/src/golang.org/x/net/html
.
Keith Rarick observa que você pode definir GOPATH=$HOME
para colocar Go src/
, pkg/
e bin/
diretórios bem debaixo do seu homedir. Isso pode ser bom (por exemplo, você já deve ter $HOME/bin
no seu caminho), mas é claro que algumas pessoas usam vários espaços de trabalho, etc.
src/
contenha, por exemplo, github.com/youruser/x
e 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.
echo $GOPATH
diz? 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.
export
ter; execute /bin/bash -c "echo \$GOPATH"
para verificar se os subprocessos podem ver $GOPATH
; se Echos esvaziar, em seguida, executar export GOPATH
e depoisgo get ...
Este funcionou
Configurando o ambiente de desenvolvimento Go no Ubuntu e como corrigir $ GOPATH / $ GOROOT
Passos
mkdir ~/go
Defina $ GOPATH em .bashrc,
export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin
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
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"
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 json2csv
meu shell? Isso ocorre porque o /bin
diretório abaixo $GOPATH
nã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 $PATH
e $GOPATH
ao seu $HOME/.bash_profile
para fazê-las persistir entre as reinicializações.
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}"
Achei mais fácil fazer assim:
export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
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.
(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 glide
estava 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.
Você $GOROOT
não deve estar configurado. Você $GOPATH
deve estar definido $HOME/go
digitandoexport $GOPATH=$HOME/go
Digite export GOROOT=""
para corrigir seu problema.
Se você se deparar com esse problema após a $GOPATH
configuração, pode ser porque o está executando com um shell não suportado. Eu estava usando fish
e não funcionou, iniciá-lo com bash
funcionou bem.
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/bin
para 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/mysql
com /home/foobar/bar
como 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 gost
de 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
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.
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 -E
ao 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