Bien que GOPATH
soit correctement défini, je ne parviens toujours pas à obtenir les options "construire" ou "exécuter" pour trouver mes propres packages. Qu'est-ce que je fais mal?
$ echo $GOROOT
/usr/local/go
$ echo $GOPATH
/home/mitchell/go
$ cat ~/main.go
package main
import "foobar"
func main() { }
$ cat /home/mitchell/go/src/foobar.go
package foobar
$ go build main.go
main.go:3:8: import "foobar": cannot find package
Cela ne fonctionne pas car votre fichier source foobar.go
ne se trouve pas dans un répertoire appelé foobar
. go build
et go install
tentent de faire correspondre les répertoires, pas les fichiers sources.
$GOPATH
sur un répertoire valide, par exemple. export GOPATH="$HOME/go"
foobar.go
vers $GOPATH/src/foobar/foobar.go
et le bâtiment devrait fonctionner correctement.Étapes supplémentaires recommandées:
$GOPATH/bin
à votre $PATH
de: PATH="$GOPATH/bin:$PATH"
main.go
dans un sous-dossier de $GOPATH/src
, par exemple. $GOPATH/src/test
go install test
devrait maintenant créer un exécutable dans $GOPATH/bin
pouvant être appelé en tapant test
dans votre terminal.Edit: puisque vous vouliez dire GOPATH, voir fasmat 's answer (upvoted)
Comme mentionné dans " Comment faire pour trouver mon paquet? ", vous devez mettre un paquet xxx
dans un répertoire xxx
.
Voir le Go language spec :
_package math
_
Un ensemble de fichiers partageant le même
PackageName
constitue la mise en œuvre d'un package.
Une implémentation peut nécessiter que tous les fichiers source d’un paquet résident dans le même répertoire.
Le code organisation mentionne:
Lors de la création d'un programme qui importe le package "
widget
", la commandego
recherche _src/pkg/widget
_ dans la racine Go, puis, si la source du package n'y est pas trouvée, il recherchesrc/widget
dans chaque espace de travail dans l’ordre.
(un "espace de travail" est une entrée de chemin dans votre GOPATH
: cette variable peut référencer plusieurs chemins pour que votre '_src, bin, pkg
_' soit)
(Réponse originale)
Vous devez également définir GOPATH
sur ~/go, et non pas GOROOT
, comme illustré dans " Comment écrire un code Go ".
Le chemin d'accès est utilisé pour résoudre les instructions d'importation. Il est implémenté et documenté dans le paquet go/build.
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.
C'est différent de GOROOT
:
Les distributions binaires Go supposent qu'elles seront installées dans _
/usr/local/go
_ (ou _c:\Go
_ sous Windows), mais il est possible de les installer à un autre emplacement.
Si vous procédez ainsi, vous devrez définir la variable d’environnementGOROOT
dans ce répertoire lorsque vous utilisez les outils Go.
TL; DR: Suivez les conventions de Go! (Leçon apprise à la dure), vérifiez les anciennes versions de go et supprimez les. Installer la dernière.
Pour moi la solution était différente. J'ai travaillé sur un serveur Linux partagé et après avoir vérifié plusieurs fois ma GOPATH
et d'autres variables d'environnement, cela ne fonctionnait toujours pas. J'ai rencontré plusieurs erreurs, notamment "Impossible de trouver le package" et "Chemin d'importation non reconnu". Après avoir essayé de réinstaller avec this solution par les instructions sur golang.org (y compris la désinstallation partie) encore rencontré des problèmes.
Il m'a fallu un peu de temps pour me rendre compte qu'il y avait encore une ancienne version qui n'a pas été désinstallée (en cours d'exécution go version
puis which go
encore ... DAHH) qui m'a amené à this question et enfin résolu.