¿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

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 ).


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").


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

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.


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


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.


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.


¿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%

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.


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

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.


-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"

-1

Tuve que agregar

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

a mi ~ / .bash_profile en Mac OS X


-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.


-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

-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).


-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)

-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)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.