J'essaie d'écrire un programme de base qui appelle une fonction sur un fichier différent, mais faisant partie du même paquet 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 string
age int
}
func NewEmployee() *Employee {
p := &Employee{}
return p
}
func PrintEmployee (p *Employee) {
return "Hello world!"
}
Merci d'avance
Veuillez lire "Comment écrire un 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 paquet.
Pour go run
, vous devez fournir tous les fichiers en tant qu'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
crée de la confusion lorsque vous travaillez avec des packages non principaux)
Je viens d'avoir le même problème dans GoLand et j'ai trouvé une solution. Vous devez changer le Run kind
de File
à Package
ou Directory
. Vous pouvez choisir ceci dans une liste déroulante si vous allez dans Run/Edit
Configurations.
Pour le package ~/go/src/a_package
, le Package path
est le a_package
et le Directory
est le ~/go/src/a_package
. Vous pouvez choisir le Run kind
que vous aimez.
Si vous utilisez go run
, faites go run *.go
. Il trouvera automatiquement tous les fichiers go dans le répertoire de travail actuel, compilera puis exécutera votre fonction principale.
Si vous souhaitez appeler une fonction à partir d'un autre fichier go et que vous utilisez Goland, recherchez l'option 'Edit configuration' dans le menu Run et modifiez le type d'exécution de File to Directory. Il efface toutes les erreurs et vous permet d’appeler des fonctions à partir d’autres fichiers go.
J'ai rencontré le même problème avec Go11
, je voulais juste dire comment je l'avais résolu pour aider les autres au cas où ils rencontreraient le même problème.
J'avais mon projet Go extérieur $GOPATH
, je devais donc activer GO111MODULE=on
sans que cette option ne soit activée, cela vous donnera ce problème; même si vous essayez de construire ou de tester l'ensemble package
ou directory
, il ne sera pas résolu sans GO111MODULE=on
Vous pouvez essayer l'une des suivantes.
Method 01: supposons que le nom de votre projet est MyProject
go build
et appuyez sur Entrée../MyProject
et appuyez sur Entréevous pouvez faire les deux étapes à la fois en tapant go build && ./MyProject
. il exécutera votre projet correctement avec tous les fichiers go
.
Méthode 02
il suffit de taper go run *.go
et d'appuyer sur Entrée. ceci exécutera tous vos go files
.
J'espère que cela aidera quelqu'un.
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 ayez à les lister manuellement ou à "faucher" une méthode sur la ligne de commande.