Golang未定义的变量

时间:2014-07-05 02:17:02

标签: go undefined

我有2个文件

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

package main

import "fmt"

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

和文件/Users/username/go/src/Test/src/main/someFile.go

package main

const SomeVar = "someFile"

但是我经常遇到编译错误

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

有人可以向我解释为什么SomeVar被标记为未定义?

4 个答案:

答案 0 :(得分:14)

尝试

go run Test.go someFile.go

答案 1 :(得分:10)

Quote

  

我认为你误解了go工具是如何工作的。你可以“去   构建“在一个目录中,它将构建整个包(一个包是   定义为目录中的所有.go文件)。去安装,去吧   测试,等等。运行是唯一需要您指定的   特定文件...它真的只是意味着在非常小的时候使用   程序,通常只需要一个文件。

所以:

go build && ./program_name

See also

答案 2 :(得分:3)

你的代码是正确的:

  • someFile.goTest.go属于同一个套餐(main
  • SomeVar是在顶级声明的const,因此它具有包块范围,即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 build文件列表启动go 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时这是一个常见问题:)< / p>

答案 3 :(得分:0)

由于我在遇到类似问题时登陆此页面,因此我将在已经说明的内容中包括此答案。如果您使用Go Run,则可以使用:

go run .go run .*

这个问题也被回答

How to run all .go files within current directory through the command line (multi file package)