【问题标题】:command-line-arguments : handling "undefined" error message命令行参数:处理“未定义”错误消息
【发布时间】:2019-06-20 15:41:24
【问题描述】:

以下是源文件的组织方式

✘-1 ~/Go/src/github.com/krmahadevan/packages 
18:24 $ tree .
.
├── sample_main.go
└── sample_one.go

0 directories, 2 files

源代码如下所示:

sample_one.go

package main

var data map[string]string

func init() {
    data = make(map[string]string, 0)
}

sample_main.go

package main

import "fmt"

func main() {
    data["foo"] = "bar"
    fmt.Println(data)
}

现在,当我尝试运行 sample_main.go 时,我收到错误消息,指出 data 未定义。

18:24 $ go run sample_main.go 
# command-line-arguments
./sample_main.go:6:2: undefined: data
./sample_main.go:7:14: undefined: data
✘-2 ~/Go/src/github.com/krmahadevan/packages

但是当我将代码构建成二进制然后执行它时,它运行良好。

✔ ~/Go/src/github.com/krmahadevan/packages 
18:27 $ go build
✔ ~/Go/src/github.com/krmahadevan/packages 
18:28 $ ./packages 
map[foo:bar]
✔ ~/Go/src/github.com/krmahadevan/packages

我想了解为什么会出现这种行为?

环境:

18:31 $ go version
go version go1.11.4 darwin/amd64

我找到的最接近的是这个帖子:Golang : command-line-arguments undefined: variable

但这篇文章讨论的是在main 中定义的作用域变量。

但我的问题陈述涉及在另一个 go 文件中定义并在 main 方法中访问的变量。

【问题讨论】:

    标签: go


    【解决方案1】:

    要了解原因,请阅读go 命令文档:

    Command go

    Compile and run Go program

    用法:

    go run [build flags] [-exec xprog] package [arguments...]
    

    Run 编译并运行命名的主 Go 包。通常包 被指定为 .go 源文件的列表,但它也可以是 导入路径、文件系统路径或匹配单个已知的模式 包,如“运行”。或“运行我的/cmd”。

    Compile packages and dependencies

    用法:

    go build [-o output] [-i] [build flags] [packages]
    

    Build 编译由导入路径命名的包,以及 它们的依赖项,但它不会安装结果。

    如果要构建的参数是 .go 文件的列表,则 build 会处理它们 作为指定单个包的源文件列表。

    有关指定包的更多信息,请参阅“转到帮助包”。更多 关于软件包和二进制文件的安装位置,请运行“go help gopath”。


    go run:通常将包指定为 .go 源文件列表。

    对于您的 go run 示例,列出文件:

    go run sample_main.go sample_one.go
    

    【讨论】:

    • 感谢您帮助解决这个问题。这解决了问题。只是为了添加更多上下文,如果有人在从 GoLang IDE 等 IDE 中运行时遇到此问题,则需要编辑配置并选择 Run kind 作为 Package。
    • @KrishnanMahadevan - 无关评论。你能帮我解决这个测试问题吗? stackoverflow.com/questions/60196503/… 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2021-04-16
    • 2016-12-14
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多