J'essaie d'installer mon package personnalisé pour mon fichier main.go. Cependant, quand j'ai couru
go install custom.go
J'ai eu 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 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, pas pour le chemin d'accès complet. C'est-à-dire que la commande avec source dansDIR/src/foo/quux
est installée dansDIR/bin/quux
et non pasDIR/bin/foo/quux
. Le préfixe "foo/
" est supprimé afin que vous puissiez ajouterDIR/bin
à votrePATH
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 deDIR/bin
.GOBIN
doit être un chemin absolu.
Par exemple, ce fil illustre ce qui se passe dans le cas où une compilation est effectuée en dehors de GOPATH/src
:
On dirait que votre
GOPATH
est définie sur~/go
mais que vous avez exécuté la commandego install
sur~/dev/go
Voir Go Build
Le chemin d'accès est une liste d'arborescence de répertoires contenant le code source Go. Il est consulté pour résoudre les importations qui ne peuvent pas être trouvées dans l'arborescence Go standard.
Si vous avez terminé go build
, vous pouvez également essayer un go install
(no 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, j'ai rencontré cette erreur lorsque j'essayais diverses commandes d'accès (construction, exécution et installation). En bref, vous ne pouvez pas aller installer un nomfichier.go. Vous pouvez uniquement installer un package.
C'était déroutant, car j'avais appris que:
nate:~/work/src/dir $ go run hello/hello.go
hello, world.
fonctionne très bien. Mais je ne pouvais pas comprendre pourquoi install 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 le répertoire dans lequel 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 runseulement _ fonctionne avec les fichiers source Go (les noms de fichiers se terminant par .go) et go installuniquement accepte les packages. Les packages sont nommés d'après leur chemin d'importation ou leur chemin d'accès 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 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 à cause des périodes principales.
Voir aussi les Docs GOPATH .
En fait, il existe 2 types de comportement différents.
go install <package>
ceci est documenté dans Compilez et installez les packages et les dépendances Vous n’avez pas besoin de GOBIN si vous définissez GOPATH correctement.
go install <gofile>
ceci n'est pas documenté et vous avez besoin de la variable env GOBIN dans ce mode.
Sur les fenêtres avec cygwin, il semble être judicieux de configurer GOBIN avec $ GOPATH/bin.
et souvenez-vous d'échapper correctement au séparateur de noms de fichiers 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 dans les réponses, si votre env. GOPATH est correctement défini sur 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 cherchez GOROOT et GOPATH pour vérifier si GOROOT pointe vers votre installation source GO et GOPATH vers votre espace de travail.
Si tout est correct, accédez au sous-répertoire où réside votrepkg.go, puis lancez d'abord $ go build (sans nom de fichier), puis $ go install (à nouveau avec notre nom de fichier), si aucun message d'erreur ne s'affiche à 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
P.S: N'oubliez pas de source ~/.bash_profile
ou ~/.zshrc
, comme suit:
$ source ~/.bash_profile
Vous n'avez pas besoin de $ GOBIN si vous avez défini un $ GOPATH correctement. Si tel est le cas, vérifiez simplement si votre projet réside dans le dossier $ GOPATH/src .
De https://golang.org/cmd/go/#hdr-Environment_variables :
GOBIN Le répertoire où "installer" installera une commande.
et https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
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.
et https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
En mode module, GOPATH ne définit plus la signification des importations lors d'une construction, mais stocke les dépendances téléchargées (dans GOPATH/pkg/mod) et les commandes installées (dans GOPATH/bin, sauf si GOBIN est défini).
Il semble donc que vous pouvez utiliser GOBIN pour remplacer temporairement ou définitivement l’emplacement d’installation binaire par défaut (c.-à-d. $GOPATH/bin
). J'ai réussi à installer un script "1 fichier" utilisant env GOBIN=$HOME/bin/ go install testfile.go
. Cela a été fait en utilisant go v1.11.
En ce qui concerne la définition de la version de la variable GOBIN
ne la nécessitant pas et en s’appuyant simplement sur GOPATH
:
GOBIN
est requis si nous n’avons pas de paquet, c’est-à-dire que le fichier se trouve directement dans le répertoire GOPATH
. Ceci est probable lorsque nous essayons les fonctionnalités Go en tant qu'apprenants
Pour les projets Go typiques, les fichiers se trouvent sous les répertoires du package. GOPATH
est suffisant.
En d'autres termes, les deux solutions suivantes fonctionneraient: une. Définissez GOBIN
explicitement comme $ GOPATH/bin [uniquement à des fins d'apprentissage, vous pouvez éviter] b. Créez un sous-répertoire qui serait le nom de votre package et déplacez-y les fichiers .go
J'imagine 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.