it-swarm-pt.com

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

Eu 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

Qualquer ajuda sobre como corrigir isso no MacOS?

132
Mona Jalal

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

O site Go oficial discute o GOPATH e como criar um diretório de área de trabalho .

export GOPATH="$HOME/your-workspace-dir/" - execute-o no seu Shell e adicione-o a ~/.bashrc ou equivalente, para que ele seja definido para você no futuro. O Go instalará os pacotes nos subdiretórios src/, bin/ e pkg/. Você vai querer colocar seus próprios pacotes em algum lugar sob $GOPATH/src, como $GOPATH/src/github.com/myusername/, se quiser publicar no GitHub. Você provavelmente também desejará export PATH=$PATH:$GOPATH/bin em seu .bashrc para poder executar programas compilados em $GOPATH

Opcionalmente, via Rob Pike , você também pode definir CDPATH por isso é mais rápido cd para o pacote dirs no bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x significa que você pode apenas digitar cd net/html ao invés de cd $GOPATH/src/golang.org/x/net/html

Keith Rarick notas você pode definir GOPATH=$HOME para colocar os diretórios src/, pkg/ e bin/ da Go sob seu homedir. Isso pode ser legal (por exemplo, você pode já ter $HOME/bin em seu caminho), mas é claro que algumas pessoas usam múltiplos espaços de trabalho, etc.

129
twotwotwo

Este trabalhou

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
78
suryakrupa

Usando brew

Eu instalei usando brew.

$ brew install go

Quando foi feito, 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 são essas linhas:

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

pATH de exportação = $ 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 então verificar usando o 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 json2csv

Parece bom, então vamos instalar json2csv:

$ go get github.com/jehiah/json2csv
$

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

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

OK, por que não consigo digitar json2csv no meu shell? Isso ocorre porque o diretório /bin em $GOPATH não está no $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á aí:

$ 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 a $PATH e $GOPATH ao seu $HOME/.bash_profile para que elas persistam entre as reinicializações.

30
slm

Assista um video

Em geral, eu sempre recomendo este vídeo oficial da Go para obter uma visão geral sobre o 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}"

17
0x434D53

Eu achei mais fácil fazer assim:

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

Para 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 ecoar $ GOPATH você deve ver o valor correto. 

3
Shasti

(para MAC)

Tentei todas essas respostas e, por algum motivo ainda desconhecido, nenhuma delas funcionou.

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

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

Até mesmo glide estava me dando o erro GOPATH not set. Resolvi-lo, novamente, por "alimentação forçada": Tentei todas essas respostas e, por algum motivo ainda desconhecido, nenhuma delas funcionou.

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

Sudo env GOPATH=$HOME/goWorkDirectory glide install

Espero que isso ajude alguém.

2
zephel

Seu $GOROOT não deve ser configurado. Você $GOPATH deve ser definido como $HOME/go digitando export $GOPATH=$HOME/go

Por favor, digite export GOROOT="" para corrigir o seu problema. 

2
julien bouteloup

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

1
Volker

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

0
Alexander Leon

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

Em primeiro lugar, você precisa baixar uma pequena ferramenta chamada gost: https://github.com/byte16/gost/releases . Se você usa o Ubuntu, você 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 para /usr/local/bin para uso conveniente:

$ Sudo mv gost /usr/local/bin

Execute o comando abaixo para adicionar o caminho que você deseja usar como GOPATH no pathspacegost maintain. É necessário dar um nome ao caminho que você usaria mais tarde.

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

Execute qualquer comando Go que você queira no formato: 

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

Por exemplo, você quer executar go get github.com/go-sql-driver/mysql com /home/foobar/bar como o GOPATH, apenas faça 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 em gostpathspace. Se você estiver sob qualquer nível de subdiretórios de /home/foobar/bar, você pode até mesmo executar o comando abaixo que faria a mesma coisa abreviadamente:

$ 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ê quer saber mais sobre install, apenas digite 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

0
Franco

Esse problema me ocorreu em Raspberry Pi. Eu tinha feito o login através do cliente VNC O problema persistiu apesar da configuração e exportação do GOPATH. Então Ran o comando "go get" sem Sudo e funcionou perfeitamente.

0
mtamboli

Se você se deparar com este problema depois de ter o $GOPATH configurado, pode ser porque você o está executando com um Shell não suportado. Eu estava usando fish e não funcionou, lançá-lo com bash funcionou bem.

0
Julien Fouilhé