web-dev-qa-db-fra.com

Erreur "Impossible de charger le package: package my_prog: packages trouvés my_prog et main"

Dans mon GOPATH j'ai quelque chose comme ça:

/bin/
/pkg/
/src/
/src/my_prog/
/src/my_prog/main.go
/src/my_prog/d_interface.go
/src/my_prog/d_struct_that_implements_the_interface.go

Dans main.go j'ai package main, dans d_interface.go et d_struct_that_implements_the_interface.go j'ai package my_prog.

Lorsque j'essaie de go build my_prog j'obtiens l'erreur suivante:

can't load package: package my_prog: found packages my_prog (d_interface.go) and main (main.go) in C:\dev\Code\Go\src\my_prog

Cela signifie-t-il que tout fichier appartenant à package main doit être placé dans son propre dossier? Si oui, quelle en est la raison?

48
TheTeaMan

Oui, chaque paquet doit être défini dans son propre répertoire.

La structure source est définie dans Comment écrire un code Go

Un package est un composant que vous pouvez utiliser dans plusieurs programmes, que vous pouvez publier, importer, extraire d'une URL, etc. Il est donc logique qu'il ait son propre répertoire autant qu'un programme peut en avoir un.

49
Denys Séguret

En outre, si vous essayez simplement de diviser le fichier main.go en plusieurs fichiers, nommez simplement les autres fichiers "package main" tant que vous définissez uniquement la fonction principale dans l'un de ces fichiers, aller.

11
dkinzer

Assurez-vous que votre package est installé dans votre répertoire $GOPATH ou déjà dans votre espace de travail/package.

Par exemple: si votre $GOPATH = "c:\go", assurez-vous que le paquet à l'intérieur de C:\Go\src\pkgName

0
msoliman