J’essaie d’écrire un programme go de base qui appelle une fonction sur un fichier différent, mais une partie du même package. Cependant, il retourne:
undefined: NewEmployee
Voici le code source:
main.go
:
package main func main() { emp := NewEmployee() }
employee.go
:
package main type Employee struct { name ssortingng age int } func NewEmployee() *Employee { p := &Employee{} return p } func PrintEmployee (p *Employee) { return "Hello world!" }
Merci d’avance
Veuillez lire “Comment écrire le code Go” .
N’utilisez pas /src
dans votre GOPATH
. Les paquets sont situés dans $GOPATH/src
.
Pour build
ou install
vous devez avoir vos fichiers dans un répertoire de package.
Pour go run
, vous devez fournir tous les fichiers en argument:
go run main.go employee.go
Mais, vous devriez presque toujours utiliser go install
, ou go build
(et de préférence le premier, car go build
provoque de la confusion lorsque vous travaillez avec des paquetages non principaux)
J’ai juste eu le même problème avec GoLand et ma solution a fonctionné. Vous devez modifier le Run kind
de File
en Package
ou Directory
. Vous pouvez choisir ceci dans une liste déroulante si vous allez dans les configurations d’ Run/Edit
.
Pour le package ~/go/src/a_package
, le Package path
du Package path
est a_package
et le Directory
est ~/go/src/a_package
. Vous pouvez choisir le Run kind
que vous aimez.
Si vous souhaitez appeler une fonction à partir d’un autre fichier go et que vous utilisez Goland, recherchez l’option ‘Modifier la configuration’ dans le menu Exécuter et remplacez le type d’exécution de Fichier par Répertoire. Il efface toutes les erreurs et vous permet d’appeler des fonctions à partir d’autres fichiers go.
Si vous utilisez go run
, go run
go run *.go
. Il va automatiquement trouver tous les fichiers aller dans le répertoire de travail en cours, comstackr et ensuite exécuter votre fonction principale.
Si votre dossier source est structuré / go / src / blog (en supposant que le nom de votre dossier source est blog).
Cela devrait exécuter tous vos fichiers en même temps, au lieu que vous deviez lister les fichiers manuellement ou “dénigrer” une méthode sur la ligne de commande.