2014-07-05 191 views
10

我有2個文件去Golang未定義的變量

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

package main 

import "fmt" 

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

和文件/用戶/用戶名/去/ src目錄/Test/src/main/someFile.go

package main 

const SomeVar = "someFile" 

但是我經常收到編譯器錯誤

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

有人可以向我解釋爲什麼SomeVar標籤爲undefined?

+2

如何調用編譯器?如果你跑'去建立Test.go',那麼它只會認爲一個文件是包的一部分。 –

+0

1.使用'go build' - 運行真的只適用於簡單的單一文件程序。 2.不要調用文件夾'main'。 – elithrar

+0

請顯示您的'$ GOPATH'請 – 0xAX

回答

11

嘗試

go run Test.go someFile.go 
10

Quote

我想你誤會旅途工具是如何工作的。您可以在目錄中執行「執行 構建」,它將構建整個包(定義爲目錄中的所有.go文件的包爲 )。去同樣安裝,去 測試,等等。去運行是唯一一個需要你指定 特定的文件...它只是用於非常小的 程序,它通常只需要一個文件。

所以做:

go build && ./program_name 

See also

+0

@staticx:它提供了錯誤和解決方案的解釋。它爲這個問題提供了一個答案。 – peterSO

+1

現在確實如此。你的帖子出現在低質量隊列中。 – Brian

+0

這幫了我!我遇到了這個問題,試圖在Gogland運行我的大型項目。我通過轉到運行配置並將項目類型切換到目錄來修復它! – Shadoninja

3

你的代碼是正確的:

  • someFile.goTest.go屬於同一包(main
  • SomeVarconst宣佈在頂層,所以它有一個包塊範圍,即main包塊範圍
  • 因此,SomeVar是可見的,並且可以在這兩個文件

訪問(如果您需要檢查的作用域在Go中,請參閱Language Specification - Declarations and Scope)。

爲什麼你得到undefined錯誤呢?

你可能推出go build Test.gogo run Test.go,既產生下面的輸出,如果從/Users/username/go/src/Test/src/main推出:

# command-line-arguments 
./Test.go:6: undefined: SomeVar 

您可以在這裏找到了原因:Command go

如果啓動go buildgo run與列表的.go文件,它將它們視爲指定單個包的源文件列表,即它認爲main包中沒有其他代碼段,因此錯誤河 解決的辦法是包括所有必需的.go文件:

go build Test.go someFile.go 

go run Test.go someFile.go 

go build也將不帶參數工作,建立它找到的所有文件包中的結果:

go build 

注1 :上述命令涉及本地包,因此必須從/Users/username/go/src/Test/src/main目錄中啓動

注2:雖然其他答案已經提出了有效的解決方案,但我決定在此處添加更多的細節以幫助社區,因爲在開始使用Go時這是一個常見問題:)