macos - mac - Ir a instalar siempre falla, no hay directorio de instalación fuera de GOPATH
install golang osx (10)
Cuando no proporciona argumentos para go install
, de manera predeterminada intenta instalar el paquete en el directorio actual. El mensaje de error le dice que no puede hacer eso, porque el directorio actual no es parte de su $GOPATH
.
Tu también puedes:
- Defina
$GOPATH
en su $ HOME (export GOPATH=$HOME
). - Mueva su fuente dentro del
$GOPATH
actual (mv ~/src/go-statsd-client /User/me/gopath
).
Después de cualquiera, ir al directorio go-statsd-client
y tipear go install
funcionará, y también lo hará tipeando go install go-statsd-client
desde cualquier lugar en el sistema de archivos. Los binarios construidos irán a $GOPATH/bin
.
Como sugerencia no relacionada, es probable que desee github.com/you/go-statsd-client
espacio de nombre a su paquete con un nombre de dominio, para evitar el conflicto de nombres (por ejemplo, github.com/you/go-statsd-client
, si es allí donde tiene su código fuente).
~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1/
~/src/go-statsd-client> go install
go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH
No importa en qué estructura se encuentre el proyecto, siempre falla con el mismo mensaje. Go build funciona a la perfección.
Aquí está mi go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"
Esto está en Mac OSX Mountain Lion y se instaló con homebrew.
En Windows, mi ventana de cmd ya estaba abierta cuando configuré la variable de entorno GOPATH. Primero tuve que cerrar el cmd y luego volver a abrirlo para que sea efectivo.
En mi caso (OS X) fue porque configuré GOPATH
en /home/username/go
(según el libro) en lugar de /Users/username/go
Está utilizando ir a instalar en un directorio fuera de la carpeta GOPATH. Establezca su variable de entorno GOBIN o mueva la carpeta src dentro de GOPATH.
GOPATH/
bin/
src/
go-statsd-client/
Más información: GO BUILD Código fuente , línea 296
Estoy en Windows, y lo obtuve dando el comando go help gopath
a cmd, y leo el texto en negrita en las instrucciones,
es decir, si el código que desea instalar está en ..BaseDir.../SomeProject/src/basic/set
, el GOPATH no debería ser la misma ubicación que el código, debería ser solo Base Project DIR: ..BaseDir.../SomeProject
.
La variable de entorno GOPATH enumera 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.
Si la variable de entorno no está configurada, GOPATH adopta de manera predeterminada un subdirectorio llamado "ir" en el directorio de inicio del usuario ($ HOME / ir a Unix,% PERFIL DE USUARIO% ir a Windows), a menos que ese directorio tenga una distribución de Go. Ejecute "go env GOPATH" para ver el GOPATH actual.
Consulte https://golang.org/wiki/SettingGOPATH para establecer un GOPATH personalizado.
Cada directorio enumerado en GOPATH debe tener una estructura prescrita:
El directorio src contiene el código fuente. La ruta debajo de src determina la ruta de importación o el nombre del ejecutable.
El directorio pkg contiene los objetos del paquete instalados. Al igual que en el árbol Ir, cada par de sistema operativo y arquitectura de destino tiene su propio subdirectorio de paquete (pkg / GOOS_GOARCH).
Si DIR es un directorio listado en GOPATH, un paquete con código fuente en DIR / src / foo / bar se puede importar como "foo / bar" y tiene su formulario compilado instalado en "DIR / pkg / GOOS_GOARCH / foo / bar.a ".
El directorio bin contiene comandos compilados. Cada comando recibe el nombre de su directorio de origen, pero solo el elemento final, no toda la ruta. Es decir, el comando con origen en DIR / src / foo / quux se instala en DIR / bin / quux, no en DIR / bin / foo / quux. El prefijo "foo /" se elimina para que pueda agregar DIR / bin a su RUTA para obtener los comandos instalados. Si se establece la variable de entorno GOBIN, los comandos se instalan en el directorio que nombra en lugar de DIR / bin. GOBIN debe ser un camino absoluto.
Aquí hay un diseño de directorio de ejemplo:
GOPATH=/home/user/go /home/user/go/ src/ foo/ bar/ (go code in package bar) x.go quux/ (go code in package main) y.go bin/ quux (installed command) pkg/ linux_amd64/ foo/ bar.a (installed package object)
..........
si GOPATH se ha establecido en el DIR del proyecto base y todavía tiene este problema, en Windows puede intentar establecer GOBIN como Base Project DIR/bin
o %GOPATH%/bin
.
Necesita configurar GOPATH y GOBIN. Asegúrese de haber hecho lo siguiente (reemplace ~ / go con su GOPAH preferido y luego cambie GOBIN). Esto se prueba en Ubuntu 16.04 LTS.
exportar GOPATH = ~ / go
mkdir ~ / go / bin
exportar GOBIN = $ GOPATH / bin
La respuesta seleccionada no resolvió el problema para mí.
Para cualquier usuario de OS X y para mí en el futuro, también debe configurar GOBIN
para evitar este mensaje confuso durante la instalación y go get
mkdir bin
export GOBIN=$GOPATH/bin
Por lo que vale, aquí está mi .bash_profile, que funciona bien para mí en un Mac con Atom, después de instalar ir con Homebrew:
export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
Querrá tener 3 directorios dentro del directorio elegido de GOPATH.
GOPATH
/bin
/src
/someProgram
program.go
/someLibrary
library.go
/pkg
A continuación, ejecutará go install
desde adentro, ya sea algún programa (que coloca un archivo ejecutable en el contenedor) o alguna biblioteca (que coloca una biblioteca en paquete).
Tuve este problema en Windows.
Mi problema era que mi variable de entorno %GOPATH%
estaba configurada para
C:/Users/john/src/goworkspace
en lugar de
C:/Users/john/src/goworkspace/
Al agregar la barra al final desaparecida al final, se solucionó por mí.