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 renvoie:
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!"
}
package x
, et votre paquet principal ne contient généralement qu'un seul fichier, puis importe les autres éléments dont il a besoingo run
? (et voir golang.org/doc/code.html )main.go
etemployee.go
? Parce que tous les fichiers go sont censés avoir une instruction package, et je n'en vois aucune dans la vôtre. Voir: golang.org/doc/code.html#PackageNamesgo
outil.Réponses:
Veuillez lire "Comment écrire le code Go" .
Ne l'utilisez pas
/src
dans votreGOPATH
. Les packages sont situés dans$GOPATH/src
.Pour
build
ouinstall
vous devez avoir vos fichiers dans un répertoire de package.Pour
go run
, vous devez fournir tous les fichiers en argument:Mais, vous devriez presque toujours utiliser
go install
, ougo build
(et de préférence le premier, car celago build
crée de la confusion lorsque vous travaillez avec des packages non principaux)la source
$ go run *.go
serait un raccourci au lieu d'exécuter tous les fichiersJ'ai juste eu le même problème dans GoLand (qui est Intellij IDEA for Go) et j'ai trouvé une solution. Vous devez changer le
Run kind
deFile
àPackage
ouDirectory
. Vous pouvez le choisir dans une liste déroulante si vous allez dansRun/Edit
Configurations.Par exemple: pour le package
~/go/src/a_package
, utilisez unPackage path
dea_package
et unDirectory
de~/go/src/a_package
etRun kind
dePackage
ouDirectory
.la source
Si vous utilisez
go run
, faitesgo run *.go
. Il trouvera automatiquement tous les fichiers go dans le répertoire de travail actuel, compilera puis exécutera votre fonction principale.la source
go run !(*_test).go
- Golang: exécuter tous les fichiers .go du répertoire courant via la ligne de commande (package multi-fichiers)Vous pouvez essayer l'une des solutions suivantes.
Méthode 01 : supposons que le nom de votre projet est
MyProject
go build
et appuyez sur Entrée../MyProject
et appuyez sur Entréevous pouvez effectuer les deux étapes à la fois en tapant
go build && ./MyProject
. il exécutera votre projet correctement avec tous lesgo
fichiers.Méthode 02
tapez simplement
go run *.go
et appuyez sur Entrée. cela exécutera tous vos fichiersgo files
.J'espère que cela aidera quelqu'un.
la source
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 changez le type d'exécution de Fichier à Répertoire. Il efface toutes les erreurs et vous permet d'appeler des fonctions à partir d'autres fichiers go.
la source
J'ai rencontré le même problème avec
Go11
, je voulais juste partager comment je l'ai résolu pour aider les autres au cas où ils rencontreraient le même problème.J'avais mon projet Go à l' extérieur
$GOPATH
, donc j'ai dû activerGO111MODULE=on
sans que cette option soit activée, cela vous posera ce problème; même si vous essayez de construire ou de tester le toutpackage
oudirectory
il ne sera pas résolu sansGO111MODULE=on
la source
vous devriez utiliser les modules go maintenant, si vous ne suivez pas Comment écrire du code go
Avec le module go, vous n'avez pas à mettre le code dans $ GOPATH / src. il peut aussi vivre dans n'importe quel autre endroit.
Vous pouvez déplacer le code vers un répertoire différent comme / employee, Pour le faire fonctionner Juste sous le répertoire des employés initialisez le module go
la source
go run .
exécutera tous vos fichiers. Le point d'entrée est la fonctionmain()
qui doit être unique aumain
package.Une autre option consiste à créer le binaire avec
go build
et à l'exécuter.la source
Utilisez simplement la commande
go run *.go
pour exécuter tous les fichiers go de votre package!la source
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 d'avoir à lister les fichiers manuellement ou à "dénigrer" une méthode sur la ligne de commande.
la source
go install
etgo build
êtes-vous différent? Et un exécutable est appelé en utilisant./<executable>
et nonblog
. Comme vous l'avez utilisé,go install
il est dans votreGOPATH/bin
(même ajouté à votre $ PATH, également) et c'est pourquoiblog
fonctionne juste pour vous.