code Vous est correct:
someFile.go
et Test.go
appartiennent au même ensemble (main
)
SomeVar
est un const
déclaré au plus haut niveau, il a une portée de bloc de paquet, à savoir la portée de bloc de paquet main
- en conséquence,
SomeVar
est visible et peut être consulté dans les deux fichiers
(si vous avez besoin d'examen de la portée dans Go, veuillez vous référer au Language Specification - Declarations and Scope).
Pourquoi obtenez-vous une erreur undefined
alors?
Vous avez probablement lancé go build Test.go
ou go run Test.go
, à la fois produire la sortie suivante, si lancé à partir /Users/username/go/src/Test/src/main
:
# command-line-arguments
./Test.go:6: undefined: SomeVar
Vous pouvez trouver la raison ici: Command go
Si vous lancez go build
ou go run
une liste des fichiers .go
, il les traite comme une liste de fichiers source spécifiant un seul paquet, c'est à dire, il pense qu'il n'y a pas d'autres morceaux de code dans le paquet main
, d'où le erro r. La solution est notamment tous les requis .go
fichiers:
go build Test.go someFile.go
go run Test.go someFile.go
go build
également travailler sans argument, la construction de tous les fichiers qu'il trouve dans le paquet en conséquence:
go build
Note 1 : les commandes ci-dessus font référence au package local et, en tant que telles, doivent être lancées à partir du répertoire /Users/username/go/src/Test/src/main
Note 2: bien que d'autres réponses aient déjà proposé des solutions valides, j'ai décidé d'ajouter quelques détails ici pour aider la communauté, puisque c'est une question courante quand vous commencez à travailler avec Go :)
Comment invoquez-vous le compilateur? ? Si vous avez lancé 'go build Test.go', alors il ne considérera qu'un fichier comme faisant partie du paquet. –
1. Utilisez 'go build' - go run est vraiment idéal uniquement pour les programmes de fichiers simples. 2. N'appelez pas le dossier 'principal'. – elithrar
Montrez votre $ GOPATH s'il vous plaît – 0xAX