【问题标题】:Golang undefined variableGolang 未定义变量
【发布时间】:2014-07-05 02:17:02
【问题描述】:

我有 2 个 go 文件:

/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 被标记为未定义吗?

【问题讨论】:

  • 你是如何调用编译器的?如果你运行go build Test.go,那么它只会认为一个文件是包的一部分。
  • 1.使用go build - go run 实际上只适用于简单的单文件程序。 2. 不要将文件夹命名为“main”。
  • 请出示您的$GOPATH

标签: go undefined


【解决方案1】:

试试

go run Test.go someFile.go

【讨论】:

    【解决方案2】:

    Quote:

    我认为您误解了 go 工具的工作原理。你可以做“去 build”在一个目录中,它会构建整个包(一个包是 定义为目录中的所有 .go 文件)。 go install 一样,go 测试等。运行是唯一需要您指定的 特定文件...它实际上仅用于非常小的文件 程序,通常只需要一个文件。

    这样做:

    go build && ./program_name
    

    See also

    【讨论】:

    • @staticx:它提供了错误的解释和解决方案。它提供了问题的答案。
    • 现在可以了。您的帖子出现在低质量队列中。
    • 这对我有帮助!我试图在 Gogland 中运行我的大型程序时遇到了这个问题。我通过转到运行配置并将项目类型切换到目录来修复它!
    【解决方案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 文件列表启动go buildgo run,它会将它们视为指定单个包的源文件列表,即它认为@ 中没有其他代码987654338@ 包,因此出现错误。 解决方案包括所有必需的.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 时的常见问题 :)

    【讨论】:

      【解决方案4】:

      由于在我遇到类似问题时登陆此页面,因此我将在已说明的内容旁边包含此答案。如果您使用的是 go run,您可以使用:

      go run .go run .*

      这个问题也有人回答了这个问题

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-11
        • 2021-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        相关资源
        最近更新 更多