kod jest poprawny:
someFile.go
i Test.go
należą do tego samego pakietu (main
)
SomeVar
to const
zadeklarowane na najwyższym poziomie, dzięki czemu ma zasięg blokowy pakiet, a mianowicie main
pakiet bloku zakres
- W konsekwencji
SomeVar
jest widoczne i mogą być dostępne w obu plikach
(jeśli trzeba recenzję scopingu in Go, przejdź do Language Specification - Declarations and Scope).
Dlaczego pojawia się błąd undefined
?
Prawdopodobnie rozpoczął go build Test.go
lub go run Test.go
, zarówno produkcji następujące dane wyjściowe, jeśli uruchomiony z /Users/username/go/src/Test/src/main
:
# command-line-arguments
./Test.go:6: undefined: SomeVar
Można znaleźć przyczynę tutaj: Command go
Jeśli uruchomić go build
lub go run
z listy z plików .go
, traktuje je jako listę plików źródłowych określających pojedynczy pakiet, tzn. uważa, że nie ma innych fragmentów kodu w pakiecie main
, stąd też r. Rozwiązaniem jest łącznie ze wszystkimi wymaganymi .go
plików:
go build Test.go someFile.go
go run Test.go someFile.go
go build
będzie również działać bez żadnych argumentów, budowanie wszystkie pliki znalezione w opakowaniu w wyniku:
go build
Uwaga 1 : powyższe polecenia odnoszą się do lokalnego pakietu i, jako takie, muszą być uruchomione z katalogu /Users/username/go/src/Test/src/main
katalogu
Uwaga 2: chociaż inne odpowiedzi już proponowały prawidłowe rozwiązania, postanowiłem dodać kilka dodatkowych informacji, aby pomóc społeczności, ponieważ jest to częste pytanie, gdy zaczynasz pracę z Go :)
Jak się uruchamiasz kompilator ? Jeśli uruchomisz 'go build Test.go', to tylko uzna, że jeden plik będzie częścią pakietu. –
1. Użyj 'go build' - go run jest idealny tylko dla prostych, pojedynczych programów. 2. Nie wywołuj folderu "main". – elithrar
Pokaż '$ GOPATH' please – 0xAX