¿Cuáles deberían ser los valores de GOPATH y GOROOT?

323

Estoy tratando de instalar doozer así:

$ goinstall github.com/ha/doozer

Me dan estos errores.

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
jshen
fuente
3
@Motin el enlace anterior ya no es válido
Jorrit Reedijk
El archivo se volvió obsoleto para el proyecto. Aquí se encuentra un problema relacionado con OSX: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin
Nota: de forma predeterminada, GOPATHse configurará para usted en Go 1.8 (2017). Vea mi respuesta a continuación
VonC
Sí, también me parecieron confusos, la forma en que se organizan los godocs. Esto ayudó: albertech.blogspot.com/2017/01/…
jar
1
@BenyaminJafari porque goinstalles muy antiguo antes de Go1 y no ha existido desde 2012.
Dave C

Respuestas:

310

GOPATHse discute en la cmd/godocumentación :

La GOPATHvariable de entorno enumera los lugares para buscar el código Go. En Unix, el valor es una cadena separada por dos puntos. En Windows, el valor es una cadena separada por punto y coma. En el Plan 9, el valor es una lista.

GOPATH debe configurarse para obtener, construir e instalar paquetes fuera del árbol estándar de Go.

GOROOTse discute en las instrucciones de instalación :

Las distribuciones binarias Go suponen que se instalarán en /usr/local/go(o c:\Gobajo Windows), pero es posible instalar las herramientas Go en una ubicación diferente. En este caso, debe establecer la GOROOTvariable de entorno para que apunte al directorio en el que se instaló.

Por ejemplo, si instaló Ir a su directorio de inicio, debe agregar los siguientes comandos a $HOME/.profile:

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

Nota: GOROOT debe configurarse solo cuando se instala en una ubicación personalizada.

(versión actualizada de la respuesta de Chris Bunch ).

pje
fuente
44
Hay mucha más información completa sobre GOPATH en Cómo escribir el código Go. Se requiere una comprensión de la información para comprender el gocomando, que es esencial para trabajar con Go. Por ejemplo, el uso de goinstallen el OP ahora debería ser go get.
Sonia
13
También tenga en cuenta la ruta de instalación real de go. Por ejemplo, en una configuración predeterminada de homebrew, se instalará homebrew /usr/local/Cellar/go/. En este caso, la ruta de exportación debe establecerse con export GOROOT=/usr/local/Cellar/go/{version}y export PATH=$PATH:$GOROOT/bin.
ekillaby
10
Tuve que hacer export GOROOT=/usr/local/Cellar/go/1.2/libexec/para que el mío funcionara con brew.
Steven Soroka
No puedo sugerir esta edición porque la aplicación se queja de que mi edición "parece contener" código sin formato (que no lo hace; muchas gracias SO) pero:
Comodín
A partir de Go 1.10, si GOROOT no está configurado, la herramienta go intentará resolverlo por su propia ubicación. Tampoco puedo pegar el enlace porque pegar no funciona en la aplicación iOS de Stack Exchange. Muy frustrado en este momento.
Comodín
97

Aquí está mi configuración simple:

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 se configuran de la siguiente manera:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Entonces, en resumen:

GOROOT es para compilador / herramientas que provienen de la instalación de ir.
GOPATH es para sus propios proyectos go / bibliotecas de terceros (descargadas con "go get").

EvgenijM86
fuente
Creo que esta respuesta es más fácil de entender ya que hay una asignación contra la estructura de la carpeta.
h-rai
¿GOPATH incluye árboles de proyectos enteros (por ejemplo, git) con archivos que no son go, por ejemplo, imágenes, scripts, archivos de compilación, etc.
Serge Merzliakov
52

Primera carrera go env.
Si ve que Go no está instalado, puede instalarlo a homebrewtravés de un paquete o de otras formas.
Si está viendo la salida, entonces su Goestá instalado.
Le muestra todos los envs que están configurados y no.

Si ves vacío para GOROOT:

  1. Ejecutar which go(En mi PC: /usr/local/go/bin/go)
  2. luego exportar así export GOROOT=/usr/local/go

Si ves vacío para GOPATH:

  1. Crear cualquier directorio en cualquier lugar de su computadora para proyectos go en mi caso: ~/GO_PROJECTS
  2. Luego export GOPATH=~/GO_PROJECTS
РАВИ
fuente
2
which goLo hice por mí. Estaba usando otra ubicación de instalación de una instalación anterior usando Chocolatey. Eliminó esa carpeta y la eliminó de la variable PATH. Ahora funciona. ¡Gracias!
sgarg
which gocomando no funcionó para mí en Windows 7. ¿Cómo encuentro donde debería ejecutar este comando
firstpostcommenter
El comando correspondiente de Windows es where goque le mostrará la ruta del archivo ejecutado
Falco el
export GOPATH=~/GO_PROJECTShizo trabajo
Thamaraiselvam
39

GOPATHse discute aquí :

La GOPATHvariable de entorno

GOPATH se puede establecer en una lista de rutas separadas por dos puntos dentro de las cuales se puede encontrar el código Go, los objetos del paquete y los ejecutables.

Establezca una GOPATHpara usar goinstall para construir e instalar su propio código y bibliotecas externas fuera del árbol de Go (y para evitar escribir Makefiles).

Y GOROOTse discute aquí :

$GOROOTLa raíz del árbol Go, a menudo $HOME/go. Este valor predeterminado es el padre del directorio donde all.bashse ejecuta. Si elige no configurar $GOROOT, debe ejecutar gomake en lugar de make o gmake al desarrollar programas Go utilizando los makefiles convencionales.

Chris Bunch
fuente
entonces, si tengo instalado en ~ / projects / go, ¿cuáles deberían ser los valores de la variable para encontrar os, fmt, etc.?
jshen 01 de
2
Entonces, ¿dónde se instala Go cuando tú sudo apt-get install golang?
weberc2
99
@ weberc2 si corres go envdeberías ver esa información, para mí fue/usr/lib/go/
Andre
19

Leí los go help gopathdocumentos y todavía estaba increíblemente confundido, pero encontré esta pequeña pepita de otra página de documentos:

La variable de entorno GOPATH especifica la ubicación de su espacio de trabajo. Es probable que sea la única variable de entorno que necesitará establecer al desarrollar el código Go.

http://golang.org/doc/code.html#GOPATH

Max
fuente
10

GOPATH no debe apuntar a la instalación de Go, sino a su espacio de trabajo (consulte https://golang.org/doc/code.html#GOPATH ). Cada vez que instales algún paquete con go get o go install, aterrizará dentro de GOPATH. Es por eso que le advierte, que definitivamente no desea que los paquetes aleatorios de Internet se descarguen en su instalación oficial.

arganzheng
fuente
9

A partir de go 1.8 (Q2 2017), GOPATH se configurará de forma predeterminada en $ HOME / go

Ver número 17262 y el comentario de Rob Pike:

$HOME/goserá.
No hay una mejor respuesta única, pero esta es corta y dulce, y solo puede ser un problema elegir ese nombre si $HOME/goya existe, lo que solo será feliz para los expertos que ya se han instalado y lo entenderán GOPATH.

VonC
fuente
¿Cómo puede un tema tan simple volverse tan complejo? Gracias por la mejor respuesta aquí.
dodgy_coder
@dodgy_coder En realidad ... mira las dos primeras líneas de mi otra respuesta: stackoverflow.com/a/37905102/6309 ;) Eso podría terminar siendo aún más simple: ¡no más GOPATH en absoluto! Más detalles en stackoverflow.com/a/48914523/6309 .
VonC
Sí, estoy de acuerdo, GOPATH no es realmente necesario si opta por el valor predeterminado, ¿es correcto? Necesitaba configurarlo de todos modos debido a que era necesario para el entorno de desarrollo de Google App Engine (Go Standard). En realidad te dicen que configures el GOPATH, ¡pero no te dicen a qué valor configurarlo ...!
dodgy_coder
@dodgy_coder Sí, por defecto, Go buscará la RUTA del proyecto en un valor predeterminado fijo.
VonC
6

Como se ha mencionado más arriba:

La variable de entorno GOPATH especifica la ubicación de su espacio de trabajo.

Para Windows , esto funcionó para mí (en la ventana Ms-dos):

set GOPATH=D:\my_folder_for_go_code\

Esto crea una variable GOPATH que Ms-dos reconoce cuando se usa de la siguiente manera:

cd %GOPATH%
Timothée HENRY
fuente
3

Respecto GOROOTespecíficamente, Go 1.9 lo configurará automáticamente en su ruta de instalación.
Incluso si tiene múltiples Go instalados, llamando al 1.9.x uno se establecerá GOROOTen /path/to/go/1.9(antes, si no está configurado, asumió una ruta predeterminada como /usr/local/gooc:\Go ).

Ver CL Go Review 53370 :

El go toolahora usará la ruta de la que fue invocado para intentar localizar la raíz del árbol de instalación Go .
Esto significa que si toda la instalación de Go se mueve a una nueva ubicación, elgo tool debería continuar funcionando como de costumbre.

Esto puede anularse si se establece GOROOTen el entorno, lo que solo debe hacerse en circunstancias inusuales.
Tenga en cuenta que esto no afecta el resultado de la runtime.GOROOT()función , que continuará informando la ubicación de instalación original; Esto puede solucionarse en versiones posteriores.

VonC
fuente
0

A partir de 2020 y Go versión 1.13+, en Windows la mejor manera de actualizar GOPATH es simplemente escribiendo el símbolo del sistema:

setx GOPATH C:\mynewgopath
Farshid
fuente
0

Aquí hay una solución (usuario único):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

gose queja si cambia .gopatha.go .

Desearía que fueran con la forma en que lo rust/cargohicieron los chicos y simplemente pusieron todo en un lugar.

fragmentos
fuente
-1

en osx, instalé con brew, aquí está la configuración que funciona para mí

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"
Edwin Ikechukwu Okonkwo
fuente
-1

Tuve que agregar

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

a mi ~ / .bash_profile en Mac OS X

Shammi Shailaj
fuente
-1

También hay un caso en el que cuando usamos go compila todos los archivos go.

Digamos que teníamos un archivo main.go y luego cambiamos el archivo actual a main_old.go y luego agregamos nuestro nuevo archivo main.go. Luego, cuando creamos nuestra aplicación, todos los archivos go se compilarán. Entonces, el error que está sucediendo podría deberse a un error de compilación en algunos otros archivos go.

Jino Jossy
fuente
-1

Una vez que se instala Go lang, GOROOT es el directorio raíz de la instalación.

Cuando exploté el binario Go Lang en el directorio C: \ de Windows, mi GOROOT debería ser C: \ go. Si se instala con el instalador de Windows, puede ser C: \ Archivos de programa \ go (o C: \ Archivos de programa (x86) \ go, para paquetes de 64 bits)

 GOROOT = C:\go

mientras mi GOPATH es la ubicación del código fuente de Go lang o el espacio de trabajo.

Si mi código fuente Go lang se encuentra en C: \ Users \\ GO_Workspace, su GOPATH sería el siguiente:

 GOPATH = C:\Users\<xyz>\GO_Workspace
Amit Kaneria
fuente
-1

No necesita establecerlo explícitamente GOROOT(las versiones modernas de Go pueden resolverlo por sí mismas en función de la ubicación del binario go que ejecuta).

Además, recibí el siguiente error al intentar trabajar con vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

Eliminando GOROOT, actualizando mi GOPATH y export GO111MODULE="on"resolvió el problema.

GOPATH ver aquí

GOPATH se puede establecer en una lista de rutas separadas por dos puntos dentro de las cuales se puede encontrar el código Go, los objetos del paquete y los ejecutables.

Establezca un GOPATH para usar goinstall para construir e instalar su propio código y bibliotecas externas fuera del árbol Go (y para evitar escribir Makefiles).

Effi Bar-She'an
fuente
-2

los valores deben ser (MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)
Diego Santa Cruz Mendezú
fuente
-3

Si está utilizando la distribución ir, debe señalar dónde están los archivos de inclusión, por ejemplo:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(Esto es para Fedora 20)

Breno Leitão
fuente