2014-07-05 15 views
10

mam 2 pliki GoGolang niezdefiniowana zmienna

/Users/username/go/src/Test/src/main/Test.go

package main 

import "fmt" 

func main() { 
    fmt.Printf(SomeVar) 
} 

i plik/Użytkownicy/nazwa_użytkownika/go/src /Test/src/main/someFile.go

package main 

const SomeVar = "someFile" 

jednak ja ciągle się błąd kompilatora

/Users/username/go/src/Test/src/main/Test.go:6: undefined: SomeVar 

Czy ktoś może mi wyjaśnić, dlaczego SomeVar ma nieokreśloną nazwę?

+2

Jak się uruchamiasz kompilator ? Jeśli uruchomisz 'go build Test.go', to tylko uzna, że ​​jeden plik będzie częścią pakietu. –

+0

1. Użyj 'go build' - go run jest idealny tylko dla prostych, pojedynczych programów. 2. Nie wywołuj folderu "main". – elithrar

+0

Pokaż '$ GOPATH' please – 0xAX

Odpowiedz

10

Quote:

Myślę, że nieporozumienie jak działa narzędzie iść. Możesz zrobić "go build" w katalogu, a to zbuduje cały pakiet (pakiet jest zdefiniowany jako wszystkie pliki .go w katalogu). To samo dla instalacji, test itd. Uruchomienie to jedyny, który wymaga podania konkretnych plików ... tak naprawdę jest przeznaczony tylko do bardzo małych programów , które zwykle wymagają tylko jednego pliku.

Więc:

go build && ./program_name 

See also

+0

@staticx: Zawiera wyjaśnienie błędu i rozwiązania. Zapewnia odpowiedź na to pytanie. – peterSO

+1

Teraz to robi. Twój wpis pojawił się w kolejce niskiej jakości. – Brian

+0

To mi pomogło! Próbowałem uruchomić mój duży program w Gogland. Naprawiłem to, przechodząc do konfiguracji uruchamiania i przełączając typ projektu do katalogu! – Shadoninja

3

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 :)

Powiązane problemy