J'essaye 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 configurer GOBIN?
go install
installe des packages et non des fichiers individuels. Veuillez lire l'intégralité de golang.org/cmd/go et voir comment configurer vos fichiers.Réponses:
Mise à jour 2020: depuis Go 1.11 et l' introduction des modules Go ,
GOPATH
n'est plus nécessaire par projet, et par défaut~/go
pour les outils / projets globaux que vous auriezgo get
.Go 1.16 (Q1 2020) doit être défini par défaut
GOBIN
surGOPATH[0]/bin
.Mais pour l'instant, pour tout projet utilisant des modules, vous n'auriez plus de message d'erreur comme "
go install: no install location ...
".Réponse originale 2014:
Vérifiez votre
GOPATH
variable.Assure-toi:
bin
dossier dans votre dossier GOPATH.Voir la variable d'environnement GOPATH (où 'DIR' est un
GOPATH
dossier):Par exemple, ce fil illustre ce qui se passe dans le cas où une construction go est effectuée en dehors de
GOPATH/src
:Voir Go Build
Si vous avez fait
go build
, vous pouvez également essayer ungo install
(noncustom.go
): vous voulez installer le package, pas un seul fichier.la source
J'ai tracé la voie de GOBIN et cela a fonctionné pour moi
la source
cannot install, GOBIN must be an absolute path
:(..
ou~
dans le chemin que vous avez spécifié? J'ai eu cette erreur et je suis juste passé à un chemin absolu tel que/home/ben/bin/
ou même$HOME/bin/
. Ma commande complète était (dans Fishshell, allez v1.11)env GOBIN=$HOME/bin/ go install testfile.go
.En tant que débutant, j'ai rencontré cette erreur lorsque j'essayais diverses commandes go (construire, exécuter et installer). Bref, vous ne pouvez pas aller installer un filename.go . Vous ne pouvez installer qu'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 l' installation 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)
Quel que soit le répertoire dans lequel je me trouvais:
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 parce que l' exécution de go ne fonctionne avec les fichiers sources Go (noms de fichiers qui se terminent par .go) et aller installer uniquement accepte les paquets. Les packages sont nommés par leur chemin d'importation ou le chemin du système de fichiers. Donc:
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 package 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 en raison des périodes de pointe.
Voir aussi la documentation GOPATH .
la source
go install
fonctionne sur les répertoires et si vous spécifiez un fichier go particulier, cela peut causer ce problème particulier.En fait, il existe 2 types de comportement différents.
go install <package>
ceci est documenté dans Compiler et installer des packages et des dépendances. Vous n'avez pas besoin de GOBIN si vous définissez GOPATH correctement.
go install <gofile>
cela n'est pas documenté et vous avez besoin de la variable d'environnement GOBIN dans ce mode.
la source
go install <gofile>
est documenté,go help packages
auquelgo install --help
fait référence. Le problème est quego install
(dans la version 1.9.2 et les versions antérieures) a un comportement incohérent, dans un cas, il nécessite et dans l'autre, il ne nécessite pas que GOBIN soit explicitement défini.Comme les réponses précédentes l'ont souligné, si votre env GOPATH est correctement défini sur votre espace de travail, vous n'avez pas besoin de définir la variable d'environnement 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 pointe vers votre espace de travail.
Si tout est correct, accédez au sous-répertoire où réside votre pkg.go, puis exécutez d'abord $ go build (sans nom de fichier) et $ go install (encore une fois sans nom de fichier) ensuite, si vous ne voyez aucun message d'erreur à l'écran, votre package est prêt dans votre espace de travail / pkg / youros /../ yourpackage.a
la source
Sur Windows avec cygwin, il semble être une bonne idée de configurer GOBIN sur $ GOPATH / bin.
et n'oubliez pas d'échapper correctement au séparateur de nom de fichier Windows:
la source
Pour le
*nix
système, 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 vous procurer
~/.bash_profile
ou~/.zshrc
, comme suit:la source
/usr/local/go/bin
?En ce qui concerne la configuration de la
GOBIN
version de la variable ne l'exigeant pas et se basant simplement surGOPATH
:GOBIN
est nécessaire si nous n'avons pas de package, c'est-à-dire que le fichier est directement dans leGOPATH
répertoire. Cela est probable lorsque nous essayons les fonctionnalités Go en tant qu'apprenantsPour les projets Go classiques, les fichiers se trouvent dans les répertoires du package. Pour ceux-ci,
GOPATH
c'est assez bien.En d'autres termes, les deux solutions suivantes fonctionneraient: a. Définir
GOBIN
explicitement comme $ GOPATH / bin [uniquement à des fins d'apprentissage, peut éviter] b. Créez un sous-répertoire qui serait le nom de votre package et déplacez-y les fichiers .goJe suppose que les utilitaires Go devraient supprimer l'erreur ci-dessus et mieux gérer le scénario - selon que l'argument est un répertoire ou un fichier source
la source
Pour les utilisateurs de WINDOWS
Ouvrez une invite de commande (
Win
+r
puis tapezcmd
) ou une fenêtre PowerShell (Win
+x
puis tapezi
).Réglage du GOPATH
go env -w GOPATH=c:\your-go-work
Plus de détails dans le lien ci-dessous https://github.com/golang/go/wiki/SettingGOPATH#windows
Réglage de GOBIN
go env -w GOBIN=C:\somewhere\else\bin
Je recommande de vérifier l'exemple de code fourni par golang. Cela m'a beaucoup aidé. https://golang.org/doc/code.html#Command
la source
Sous Windows:
go env -w GOBIN=C:\Users\yourname\go\bin
Confirmez avec la
go env
commande que GOBIN est défini, puis lago install
commande enregistre correctement l'exécutable correctement dans le répertoire bin.la source
J'ai aussi eu le même problème (GOBIN n'a pas besoin d'être réglé séparément), assurez-vous d'avoir les éléments suivants
go install <your_module>
la source
Vous n'avez pas besoin de $ GOBIN si vous avez correctement défini un $ GOPATH . Si tel est le cas, revérifiez simplement si votre projet réside dans le dossier $ GOPATH / src .
la source
Depuis https://golang.org/cmd/go/#hdr-Environment_variables :
et https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
et https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
Donc, il semble que vous pouvez utiliser GOBIN pour remplacer temporairement ou définitivement l'emplacement d'installation binaire par défaut (ie
$GOPATH/bin
). J'ai réussi à installer un "script" à 1 fichier en utilisantenv GOBIN=$HOME/bin/ go install testfile.go
. Cela a été fait en utilisant go v1.11.la source
Essayer
export GOROOT=""
export PATH=$PATH:$GOROOT/bin
la source