GOBIN non défini: impossible de lancer go install

J’essaie d’installer mon package personnalisé pour mon fichier main.go. Cependant, quand j’ai couru

go install custom.go 

J’ai cette erreur

 go install: no install location for .go files listed on command line (GOBIN not set) 

Comment définir GOBIN?

Vérifiez votre variable GOPATH .
Assure-toi:

  • vos sources sont sous GOPATH/src
  • vous avez un dossier bin dans votre dossier GOPATH.

Voir la variable d’environnement GOPATH (où ‘DIR’ est un dossier GOPATH ):

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, et non pour l’intégralité du chemin. En d’autres DIR/src/foo/quux , la commande avec source dans DIR/src/foo/quux est installée dans DIR/bin/quux , pas dans DIR/bin/foo/quux . Le préfixe ” foo/ ” est supprimé afin que vous puissiez append 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 au lieu de DIR/bin . GOBIN doit être un chemin absolu.


Par exemple, ce thread illustre ce qui se produit dans le cas où une construction est effectuée en dehors de GOPATH/src :

On dirait que votre GOPATH est réglé sur ~/go mais vous avez lancé la commande go install sur ~/dev/go

Voir Go Build

Le chemin d’access est une liste d’arborescences contenant le code source Go. Il est consulté pour résoudre les importations introuvables dans l’arborescence standard de Go.

Si vous avez terminé, vous pouvez également essayer l’ go install (pas de custom.go ): vous voulez installer le paquet, pas un seul fichier.

J’ai défini le chemin GOBIN et cela a fonctionné pour moi

 export GOBIN=[WorkspacePath]/bin 

En tant que débutant, je suis tombé sur cette erreur lorsque j’essayais différentes commandes (build, run et install). En bref, vous ne pouvez pas installer un nom de fichier.go . Vous ne pouvez installer qu’un package.

C’était déroutant, car j’avais appris cela:

 nate:~/work/src/dir $ go run hello/hello.go hello, world. 

fonctionne très bien. Mais je ne pouvais pas comprendre pourquoi installer ne fonctionnerait pas:

 nate:~/work/src/dir $ go install hello/hello.go go install: no install location for .go files listed on command line (GOBIN not set) nate:~/work/src/dir $ go install hello can't load package: package hello: cannot find package "hello" in any of: /opt/go/src/hello (from $GOROOT) /home/ubuntu/work/src/hello (from $GOPATH) 

Peu importe dans quel répertoire j’étais:

 nate:~/work/src/dir $ cd hello nate:~/work/src/dir/hello $ go install hello.go go install: no install location for .go files listed on command line (GOBIN not set) nate:~/work/src/dir/hello $ go install hello can't load package: package hello: cannot find package "hello" in any of: /opt/go/src/hello (from $GOROOT) /home/ubuntu/work/src/hello (from $GOPATH) 

Cette confusion est due au fait que go run fonctionne uniquement avec les fichiers sources de Go (noms de fichiers qui se terminent par .go) et go install n’accepte que les paquets. Les packages sont nommés par leurs chemins d’importation ou leur chemin d’access au système de fichiers. Ainsi:

 nate:~/work/src/dir $ go install dir/hello nate:~/work/src/dir $ go install ./hello/ nate:~/work/src/dir/hello $ go install . 

tout fonctionne très bien. Le premier fait référence au paquet par le chemin d’importation (étant donné que $ GOPATH = “/ home / nate / work”, les outils go recherchent le code source dans / home / nate / work / src), les autres sont interprétés comme un système de fichiers chemins en raison des périodes de pointe.

Voir aussi les documents GOPATH .

En fait, il existe deux types de comportement différents.

 go install  

Ceci est documenté dans Comstackr et installer des paquets et des dépendances Vous n’avez pas besoin de GOBIN si vous définissez correctement GOPATH.

 go install  

Ceci n’est pas documenté et vous avez besoin de la variable env GOBIN dans ce mode.

Sur Windows avec cygwin, il semble judicieux de configurer GOBIN sur $ GOPATH / bin.

et n’oubliez pas d’échapper correctement au séparateur de nom de fichier Windows:

 $ echo $GOROOT C:\Go\ carl@rainier ~/gocode/src/github.com/user/hello $ echo $GOPATH C:\cygwin64\home\carl\gocode carl@rainier ~/gocode/src/github.com/user/hello $ echo $GOBIN C:\cygwin64\home\carl\gocode\bin 

Comme indiqué précédemment, si votre envoi GOPATH est correctement défini dans votre espace de travail, vous n’avez pas besoin de définir la variable env GOBIN.

Veuillez vérifier vos variables d’environnement go en exécutant $ go env | grep -i “^ GO” et recherchez GOROOT et GOPATH pour vérifier si GOROOT pointe vers votre installation source GO et GOPATH pointant vers votre espace de travail.

Si tout est correct, naviguez vers le sous-répertoire où se trouve yourpkg.go, puis exécutez $ go build (sans nom de fichier) en premier et $ go install (encore une fois sans nom de fichier) si vous ne voyez aucun message d’erreur à l’écran. le paquet est prêt dans votre espace de travail / pkg / youros /../ yourpackage.a

Pour le système *nix , regardez où go est installé, en exécutant la commande suivante:

 $ which go 

quelle sortie disons:

 /usr/local/go/bin/go 

puis ajoutez les entrées suivantes dans ~/.bash_profile ou dans ~/.zshrc :

 export GOROOT=/usr/local/go export GOPATH=$GOROOT/src //your-go-workspace export GOBIN=$GOROOT/bin //where go-generate-executable-binaries PATH=$PATH:$GOPATH:$GOBIN export PATH 

PS: N’oubliez pas de source ~/.bash_profile ou ~/.zshrc , comme suit:

 $ source ~/.bash_profile 

Vous n’avez pas besoin de $ GOBIN si vous avez correctement défini $ GOPATH . Si c’est le cas, revérifiez simplement si votre projet réside dans le dossier $ GOPATH / src .

Concernant le paramétrage de la version variable de GOBIN ne le nécessitant pas et reposant uniquement sur GOPATH :

  1. GOBIN est requirejs si nous n’avons pas de paquet, c’est-à-dire que le fichier est directement dans le répertoire GOPATH . Cela est probable lorsque nous essayons les fonctionnalités de Go en tant qu’apprenants

  2. Pour les projets Go classiques, les fichiers se trouvent dans les répertoires du package. Pour ceux-ci, GOPATH est assez bon.

  3. En d’autres termes, les deux solutions suivantes fonctionneraient: a. Définissez explicitement GOBIN comme $ GOPATH / bin [uniquement à des fins d’apprentissage, peut éviter] b. Créez un sous-répertoire qui serait le nom de votre paquet et déplacez-y les fichiers .go

  4. Je suppose que les utilitaires Go devraient supprimer l’erreur ci-dessus et gérer le scénario mieux, selon que l’argument est un répertoire ou un fichier source