~/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
Quelle que soit la structure du projet, celle-ci échoue toujours avec le même message. Allez construire fonctionne parfaitement.
Voici mon 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"
Ceci est sur Mac OSX Mountain Lion et go a été installé avec homebrew.
Lorsque vous ne fournissez aucun argument à go install
, la tentative d'installation du package dans le répertoire en cours est utilisée par défaut. Le message d'erreur vous indique qu'il ne peut pas le faire car le répertoire en cours ne fait pas partie de votre $GOPATH
.
Vous pouvez soit:
$GOPATH
dans votre $ HOME (export GOPATH=$HOME
).$GOPATH
(mv ~/src/go-statsd-client /User/me/gopath
] actuel).Après soit, aller dans le répertoire go-statsd-client
et taper go install
fonctionnera, et donc taper go install go-statsd-client
de n'importe où dans le système de fichiers. Les binaires construits iront dans $GOPATH/bin
.
En tant que suggestion non liée, vous souhaiterez probablement attribuer un nom de domaine à votre paquet, afin d'éviter les conflits de noms (par exemple, github.com/you/go-statsd-client
, si c'est là que se trouve votre code source).
Pour tous les utilisateurs OS X et futurs, vous devez également définir GOBIN
pour éviter ce message déroutant lors de l'installation et go get
mkdir bin
export GOBIN=$GOPATH/bin
Vous utilisez allez installer sur un répertoire situé en dehors du dossier GOPATH. Définissez votre variable env GOBIN ou déplacez le dossier src dans GOPATH.
GOPATH/
bin/
src/
go-statsd-client/
Plus d'informations: code source GO BUILD , ligne 296
Vous devez configurer à la fois GOPATH
et GOBIN
. Assurez-vous d’avoir effectué les opérations suivantes (veuillez remplacer ~/go
par votre GOPATH
préféré et par la suite changer GOBIN
). Ceci est testé sur Ubuntu 16.04 LTS
.
export GOPATH=~/go
mkdir ~/go/bin
export GOBIN=$GOPATH/bin
La réponse choisie n'a pas résolu le problème pour moi.
Vous voudrez avoir 3 répertoires dans votre répertoire GOPATH choisi.
GOPATH
/bin
/src
/someProgram
program.go
/someLibrary
library.go
/pkg
Ensuite, vous lancerez go install
depuis un programme (qui place un exécutable dans bin) ou une bibliothèque (qui placera une bibliothèque dans pkg).
Pour ce que ça vaut, voici mon .bash_profile, qui marche bien pour moi sur un mac avec Atom, après l’installation de go avec Homebrew:
export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
J'ai eu ce problème sous Windows.
Mon problème était que ma variable d’environnement %GOPATH%
était définie sur
C:\Users\john\src\goworkspace
au lieu de
C:\Users\john\src\goworkspace\
L'ajout de la barre oblique manquante à la fin l'a corrigé pour moi.
Dans mon cas (OS X), c’est parce que j’ai réglé GOPATH
sur /home/username/go
(comme dans le livre) au lieu de /Users/username/go
.
Je suis sous Windows et je l’ai obtenue en donnant la commande go help gopath
à cmd et en lisant le texte en gras dans l’instruction,
c’est-à-dire que si le code que vous souhaitez installer se trouve à ..BaseDir...\SomeProject\src\basic\set
, le GOPATH ne devrait pas être au même emplacement que le code, il devrait l'être juste le projet de base DIR: ..BaseDir...\SomeProject
.
La variable d'environnement GOPATH répertorie les emplacements dans lesquels rechercher le code Go. Sous Unix, la valeur est une chaîne séparée par deux-points. Sous Windows, la valeur est une chaîne séparée par des points-virgules. Sur le plan 9, la valeur est une liste.
Si la variable d'environnement n'est pas définie, GOPATH utilise par défaut un sous-répertoire nommé "go" dans le répertoire de base de l'utilisateur ($ HOME/go sur Unix,% USERPROFILE%\go sous Windows), à moins que ce répertoire ne contienne une distribution Go. Exécutez "go env GOPATH" pour voir le GOPATH actuel.
Voir https://golang.org/wiki/SettingGOPATH pour définir un GOPATH personnalisé.
Chaque répertoire répertorié dans GOPATH doit avoir une structure prescrite:
Le répertoire src contient le code source. Le chemin sous src détermine le chemin d'importation ou le nom de l'exécutable.
Le répertoire pkg contient les objets de package installés. Comme dans l'arborescence Go, chaque paire de systèmes d'exploitation et d'architectes cibles possède son propre sous-répertoire pkg (pkg/GOOS_GOARCH).
Si DIR est un répertoire répertorié dans GOPATH, un paquet avec la source dans DIR/src/foo/bar peut être importé sous le nom "foo/bar" et son formulaire compilé doit être installé dans "DIR/pkg/GOOS_GOARCH/foo/bar.a ".
Le répertoire bin contient les commandes compilées. Chaque commande est nommée pour son répertoire source, mais uniquement pour l'élément final, pas pour le chemin d'accès complet. C'est-à-dire que la commande avec source dans DIR/src/foo/quux est installée dans DIR/bin/quux, et non pas DIR/bin/foo/quux. Le préfixe "foo /" est supprimé afin que vous puissiez ajouter DIR/bin à votre PATH pour accéder aux commandes installées. Si la variable d'environnement GOBIN est définie, les commandes sont installées dans le répertoire qu'il nomme à la place de DIR/bin. GOBIN doit être un chemin absolu.
Voici un exemple de disposition de répertoire:
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 a été défini sur Base Project DIR et a toujours ce problème, dans Windows, vous pouvez essayer de définir GOBIN comme Base Project DIR\bin
ou %GOPATH%\bin
.
Sur OSX Mojave 10.14, go
est généralement installé sur /usr/local/go
.
Par conséquent, configurez ces ENV et vous devriez être prêt à partir.
export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin
Ajoutez-les également à votre bash_profile
ou zsh_profile
si cela fonctionne.
echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile
Dans Windows, ma fenêtre de commande était déjà ouverte lorsque j'ai défini la variable d'environnement GOPATH. J'ai d'abord dû fermer le cmd puis rouvrir pour qu'il soit efficace.
Il y a plusieurs façons de résoudre ce problème qui ont été définies dans ce fil et ailleurs, mais ce que la plupart des gens oublient, c'est que plus que de simplement résoudre le problème actuel, nous essayons également de résoudre le problème si nous nous trompons dans la conception du projet ou souhaité par les créateurs du projet.
Tout d'abord, vous devez corriger votre variable $ GOPATH. Soln: définissez-le sur le chemin de base de votre projet. Deuxièmement, vous devez définir un point d’entrée dans votre projet. Habituellement défini en utilisant 'main'.
C'est ainsi que l'exécution du projet comprend le répertoire de travail de base et le point de travail de votre programme.
Attention en courant
export GOPATH=$HOME
Allez supposer que votre code existe dans des endroits spécifiques liés à GOPATH
. Vous pouvez donc utiliser docker pour exécuter n’importe quelle commande go:
docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang
Et maintenant, vous pouvez utiliser n’importe quelle commande golang, par exemple:
go test github.com/<organization name>/<repository name>
Le problème est que vous ne vous trouvez pas dans le répertoire du package contenant le fichier go avec la fonction principale go et que go install ne trouve pas la commande que vous souhaitez installer (fichier go avec la fonction main go).
$ cd /path/to/file-with-main-function.go
puis lancez:
$ go install