codice Si è corretto:
someFile.go
e Test.go
appartengono allo stesso pacchetto (main
)
SomeVar
è un 012.dichiarato al livello più alto, quindi ha un campo di applicazione blocco del pacchetto, vale a dire il main
pacchetto di blocchi portata
- di conseguenza,
SomeVar
è visibile e si può accedere in entrambi i file
(se avete bisogno di rivedere scoping in Go, fare riferimento allo Language Specification - Declarations and Scope).
Perché viene visualizzato un errore undefined
?
Probabilmente lanciato go build Test.go
o go run Test.go
, sia producendo il seguente output, se lanciato da /Users/username/go/src/Test/src/main
:
# command-line-arguments
./Test.go:6: undefined: SomeVar
È possibile trovare il motivo qui: Command go
Se si avvia go build
o go run
con una lista dei file .go
, li considera come un elenco di file sorgente che specificano un singolo pacchetto, cioè, pensa che non ci siano altri pezzi di codice nel pacchetto main
, quindi l'erro r. La soluzione è inclusi tutti i necessari .go
file:
go build Test.go someFile.go
go run Test.go someFile.go
go build
funziona anche senza argomenti, la costruzione di tutti i file che trova nel pacchetto di conseguenza:
go build
Nota 1 : i comandi sopra riportati si riferiscono al pacchetto locale e, come tale, devono essere avviati dalla directory
Nota 2: sebbene altre risposte abbiano già proposto soluzioni valide, ho deciso di aggiungere qualche altro dettaglio qui per aiutare la comunità, poiché questa è una domanda comune quando inizi a lavorare con Go :)
Come stai invocando il compilatore ? Se esegui 'go build Test.go', allora considererà solo un file come parte del pacchetto. –
1. Usa 'go build' - go run è davvero l'ideale solo per semplici programmi di file singoli. 2. Non chiamare la cartella 'principale'. – elithrar
Mostra il tuo '$ GOPATH 'per favore – 0xAX