Étrange golang paquet d'importation problème
Voici l'arborescence:
+/project
+---/bin
+---/pkg
+---/src
+---/client_test
+---client_test.go
+---main.go
En main.aller:
package main
import ("client_test")
func main() {
client_test.Send()
}
Dans client_test.aller:
package client_test
func Send() {
}
Erreur:
src/main.go|8| imported and not used: "client_test"
src/main.go|32| undefined: client_test
J'ai lu Comment utiliser des packages personnalisés en golang? et je pense que j'ai eu la même solution comme ce gars, mais je ne sais pas comment résoudre ce problème. S'il vous plaît aider.
aller env:
GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOCHAR="6"
GOEXE=""
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/staff/projects/Minigame_Server" (that's exactly my working directory)
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
CGO_ENABLED="1"
- Qu'est-ce que votre $GOPATH, ou mieux encore, à la sortie de
go env
? import
essaie de trouver le chemin d'accès spécifié à partir de chaque "espace de travail" sont extraits à partir de votre$GOPATH
, à tour de rôle. À en juger par votre arbre, je dirais que vos$GOPATH
doit contenir/some/path/to/project
, qui est, il doit comprendre que le "projet" de répertoire. Est-ce à retenir pour votre cas?- OARCH="amd64" GOBIN="/usr/local/go/bin" GOCHAR="6" GOEXE="" GOGCCFLAGS="-g -O2 -fPIC-m64 -pthread -fno-commun" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/personnel/projets/Minigame_Server" (c'est exactement mon répertoire de travail) GOROOT="/usr/local/aller" GOTOOLDIR="/usr/local/go/pkg/outil/darwin_amd64" CGO_ENABLED="1"
- GOPATH doit être "/Users/personnel/projets/Minigame_Server/projet" puis.
- Je ne pense pas que le "projet" est nécessaire, car il n'est pas indiqué dans le document officiel.
- IMO la suggestion de Thomas est correct. BTW, si vous êtes en commençant par Aller, je vous recommande d'utiliser
GOPATH=$HOME
et de mettre les fichiers de paquet du paquetfoo
dans~/src/foo/*.go
, qui ont alors le chemin d'importationfoo
. Il fonctionne bien pour moi. - J'ai essayé @ThomasKappler 's solution mais ça ne marche toujours pas, je vais essayer de réinstaller l'environnement.
- le problème, c'est que votre mise en page n'est pas ce que le "document officiel" (je ne sais pas ce que c'est, mais je pense que c'est quelque chose de golang.org) parle.
go build
suppose que vos projets sont placés sous la$GOPATH/src
mais vous avez lasrc
répertoire cadre d'un projet. Ceci est contraire à la politique, que votre projet ressemble en fait à un espace de travail à lago
outil. - même shitstorm pour moi-même. ne fonctionne pas vraiment comme le java ou le c# n'est ce pas?
Vous devez vous connecter pour publier un commentaire.
Ne pas utiliser des noms réservés. Par exemple, remplacer
client_test
avecclienttest
tout au long.OK j'ai enfin trouvé ce qui ne va pas avec mon environnement:
Depuis que je suis sous mac OS X, j'ai donc utilisé .fichier pkg à installer go, et le GOROOT est "/usr/local/aller"
Puis j'ai lu un autre faux tutoriel sur GO domaines de l'installation et il a dit que je devais définir GOROOT dans mon ~/.de profil, j'ai donc ajouté "GOROOT="/usr/local/aller" à l'intérieur de ~/.de profil, puis tout est allé de mal.
Après avoir lu attentivement le document officiel, j'ai trouvé ceci:
Mais le problème est, il n'a pas parler de ce qui va se passer si vous ajoutez GOROOT dans ~/.profil après .pkg l'installation, et il ne voulait pas dire que vous ne pouvez pas le faire.
Voici mon ~/.profil ressemble maintenant (corrigée):
exportation GOPATH=$HOME/projets/
export PATH=$PATH:$GOPATH/bin
BTW: vous n'avez pas BESOIN de faire /dossier de projet sous espace de travail. Selon http://golang.org/doc/code.html#tmp_2 , il n'a pas dit que vous avez à:
Si votre $GOPATH est "/Users/personnel/projets/Minigame_Server", de votre "projet" chemin absolu doit être "/Users/personnel/projets/Minigame_Server/src/projet".
Votre importation devrait alors être
import "project/src/client_test"
.Ou, ce que vous semblez comme vous voulez le faire, étant donné que vous avez Aller liés à la sous-répertoires "/pkg" et "/bin" en vertu de "projet", configurez votre GOPATH à "/Users/personnel/projets/Minigame_Server/projet"
et puis vous pouvez
import "client_test"
. L'idée de base est que vous permettra d'ajouter l'importation de la chaîne d' $GOPATH/src/.Le (un peu ambigu, je suis d'accord) doc est ici: http://golang.org/doc/code.html#tmp_2 . Ma conjecture est que vous avez lu, ce qui est pourquoi vous avez créé l' /pkg, /bin et /src sous-répertoires, mais le hic, c'est où GOPATH devrait être, alors l'implicite sous-niveau automatiquement ajouté par Aller quand il cherche une importation (/src est ajouté automatiquement), puis l'importation de chaîne comme-est.
Vous pouvez importer le package dans le principal en utilisant le code suivant il va travailler
d'importation(
"fmt"
"./client_test")
dans le paquet principal