no se puede descargar, $ GOPATH no está configurado

150

Quiero instalar json2csv usando go get github.com/jehiah/json2csvpero recibo este error:

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

¿Alguna ayuda sobre cómo solucionar esto en MacOS?

Mona Jalal
fuente
3
Estoy teniendo el mismo problema con un paquete diferente (cachorro). ¡Vamos, mantenedores, haga un instalador (OS X) que finalice el trabajo! El instalador de OS X para Node es un gran ejemplo. Usar Node no requiere pasos adicionales de instalación manual. Simplemente funciona Espero que las futuras versiones del instalador Go sean mejores.
jwfearn

Respuestas:

140

[Actualización: a partir de Go 1.8, por GOPATHdefecto $HOME/go, pero aún puede encontrar esto útil si desea comprender el GOPATHdiseño, personalizarlo, etc.]

El sitio oficial de Go trata sobre GOPATH y cómo diseñar un directorio de espacio de trabajo .

export GOPATH="$HOME/your-workspace-dir/"- ejecútelo en su shell, luego agréguelo ~/.bashrco equivalente para que esté configurado para usted en el futuro. Ir instalará los paquetes debajo src/, bin/y pkg/, subdirectorios allí. Querrá colocar sus propios paquetes en algún lugar $GOPATH/src, como $GOPATH/src/github.com/myusername/si desea publicar en GitHub. Probablemente también desee export PATH=$PATH:$GOPATH/binen su .bashrcpara que pueda ejecutar programas compilados en $GOPATH.

Opcionalmente, a través de Rob Pike , también puede configurarlo CDPATHpara que sea más rápido cdempaquetar directorios en bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xsignifica que puede escribir en cd net/htmllugar de cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick señala puede configurar GOPATH=$HOMEpara poner Go src/, pkg/y bin/directorios justo debajo de su directorio raíz. Eso puede ser agradable (por ejemplo, es posible que ya tenga $HOME/binen su camino) pero, por supuesto, algunas personas usan múltiples espacios de trabajo, etc.

twotwotwo
fuente
Gracias por la info. ¿Necesita cambiar su espacio de trabajo para cada proyecto individual?
Doug Molineux el
1
En general, no, puede usar un espacio de trabajo que src/contiene, por ejemplo, github.com/youruser/xy github.com/youruser/y. Eso es lo que hago. Las personas pueden tener sus razones para hacer lo contrario (¿política de la compañía para mantener los proyectos separados?), Pero no puedo hablar de eso.
twotwotwo
3
$ GOPATH está configurado, pero "no se puede descargar, $ GOPATH no está configurado. Para obtener más detalles, consulte: go help gopath" aparece de todos modos.
Tyguy7
¿Qué plataforma (Windows o Linux / OS X / otro Unix)? Si no es Windows, ¿qué echo $GOPATHdice? Puede valer la pena publicarlo como una pregunta separada; parece que estás en una situación inusual, y depurarlos en los comentarios puede ser complicado.
twotwotwo
2
@ Tyguy7 es probable que no lo hayas hecho export; ejecutar /bin/bash -c "echo \$GOPATH"para verificar que los subprocesos puedan ver $GOPATH; si se hace eco vacío, entonces corre export GOPATHy luegogo get ...
sanmai
33

Usando cerveza

Lo instalé usando brew.

$ brew install go

Cuando haya terminado, si ejecuta este comando de preparación, mostrará la siguiente información:

$ 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

Las piezas importantes son estas líneas:

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

RUTA de exportación = $ RUTA: / usr / local / opt / go / libexec / bin

Configurando el entorno de GO

Eso muestra dónde se instaló GO. Necesitamos hacer lo siguiente para configurar el entorno de GO:

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

Luego puede verificar con GO para ver si está configurado correctamente:

$ 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

Se ve bien, así que vamos a instalar json2csv:

$ go get github.com/jehiah/json2csv
$

¿Lo que acaba de suceder? Lo instaló. Puedes marcar así:

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

OK, entonces ¿por qué no puedo escribir json2csvmi shell? Eso es porque el /bindirectorio debajo $GOPATHno está en tu $PATH.

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

Así que vamos a agregarlo temporalmente:

$ export PATH=$GOPATH/bin:$PATH

Y vuelva a verificar:

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

Ahora está ahí:

$ 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

Agregue las modificaciones que hemos realizado en $PATHy $GOPATHpara $HOME/.bash_profileque persistan entre reinicios.

slm
fuente
18

Ver un video

En general, siempre recomiendo este video oficial de Go para obtener una visión general rápida sobre el asunto:

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

Es más fácil ser mostrado que ser contado.

@jwfearn parafraseó la parte importante del video:

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

0x434D53
fuente
2
Excelente video introductorio: siempre entiendo mejor cuando me lo muestran.
Joshua Pinter
3
Gracias @jwfearn: los videos son para música y otros entretenimientos; no puedo copiar y pegar de ellos :-)
kguest
5

Me resultó más fácil hacerlo así:

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

Para MAC esto funcionó bien para mí.

sudo nano /etc/bashrc

y agregue el siguiente al final del archivo

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

Esto debería solucionar el problema. Intente abrir una nueva terminal y haga eco de $ GOPATH, debería ver el valor correcto.

Shasti
fuente
2

(para Mac)

Intenté todas estas respuestas y, por alguna razón aún desconocida, ninguna funcionó.

Tuve que "forzar la alimentación" del GOPATH configurando la variable de entorno por cada comando que lo requería. Por ejemplo:

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

Incluso glideme estaba dando el GOPATH not seterror. Lo resolví, nuevamente, mediante "alimentación forzada": probé todas estas respuestas y, por alguna razón aún desconocida, ninguna funcionó.

Tuve que "forzar la alimentación" del GOPATH configurando la variable de entorno por cada comando que lo requería.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Espero que esto ayude a alguien.

zephel
fuente
2

Su $GOROOTno debe ser configurado. Usted $GOPATHdebe ser fijado a $HOME/gopor tipificaciónexport $GOPATH=$HOME/go

Escribe export GOROOT=""para solucionar tu problema.

julien bouteloup
fuente
1

Solo hazlo export GOPATH="/whatever/you/like/your/GOPATH/to/be".

Volker
fuente
44
Si soy un novato, todavía no sé "dónde me gustaría que esté mi GOPATH". En mi humilde opinión es un lastre que no haya un comportamiento GOPATH predeterminado que pueda ser anulado por una variable de entorno.
jwfearn
0

Si se encuentra con este problema después de haberlo $GOPATHconfigurado, puede ser porque lo está ejecutando con un shell no compatible. Estaba usando fishy no funcionó, lanzarlo bashfuncionó bien.

Julien Fouilhé
fuente
0

Puede usar la solución "exportar" tal como lo han sugerido otros usuarios. Me gustaría proporcionarle otra solución para su conveniencia permanente: puede usar cualquier ruta como GOPATH cuando ejecute los comandos Go.

En primer lugar, debe descargar una pequeña herramienta llamada gost: https://github.com/byte16/gost/releases . Si usa ubuntu, puede descargar la versión de Linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Luego debe ejecutar los siguientes comandos para descomprimirlo:

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

Conseguirías un ejecutable gost. Puede moverlo /usr/local/binpara un uso conveniente:

$ sudo mv gost /usr/local/bin

Ejecute el siguiente comando para agregar la ruta que desea utilizar como GOPATH en el espacio de ruta que gost mantiene. Es necesario darle a la ruta un nombre que usaría más adelante.

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

Ejecute cualquier comando Go que desee en el formato:

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

Por ejemplo, desea ejecutar go get github.com/go-sql-driver/mysqlcon /home/foobar/barGOPATH, simplemente hágalo de la siguiente manera:

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

Le ayudaría a configurar el GOPATH y ejecutar el comando. Pero recuerde que ha agregado la ruta en gostel espacio de ruta . Si está bajo cualquier nivel de subdirectorios de /home/foobar/bar, incluso puede ejecutar el siguiente comando que haría lo mismo para abreviar:

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

gostes una herramienta simple de Go que puede ayudarlo a administrar GOPATHs y ejecutar comandos Go. Para obtener más detalles sobre cómo usarlo para ejecutar otros comandos Go, simplemente puede ejecutarlo gost help goCmdName. Por ejemplo, desea saber más install, simplemente escriba las palabras a continuación en:

$ gost help install

También puede encontrar más detalles en el archivo README del proyecto: https://github.com/byte16/gost/blob/master/README.md

Franco
fuente
0

Ejecute 'go env' y vea hacia dónde apunta actualmente su GOPATH. Si cambia a ese directorio, su comando 'go get..etc' debería funcionar.

Alexander Leon
fuente
0

Este problema se me ocurrió en la frambuesa pi. Había iniciado sesión a través del cliente VNC. El problema persistió a pesar de configurar y exportar GOPATH. Luego ejecutó el comando "ir a buscar" sin sudo y funcionó perfectamente.

mtamboli
fuente
-1

Tuve que ejecutar una aplicación como root (para abrir un servidor web en el puerto 80), esto me produjo el error, porque el usuario de sudo tiene un entorno diferente al usuario normal, por lo tanto, GOPATH no se configuró.

Si alguien más tiene este problema, agréguelo -Eal comando, esto preservará el entorno del usuario.

sudo -E go run main.go

Para obtener más información, consulte la discusión aquí: Grupos de Google - Problema GOPATH

Pwdr
fuente
No estoy seguro de por qué esto se downvoted, pero lo fijó para mí ...
Pwdr