首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令行参数:处理“未定义”错误消息

命令行参数:处理“未定义”错误消息
EN

Stack Overflow用户
提问于 2019-01-27 13:03:28
回答 1查看 9.9K关注 0票数 8

下面是源文件的组织方式

代码语言:javascript
复制
✘-1 ~/Go/src/github.com/krmahadevan/packages 
18:24 $ tree .
.
├── sample_main.go
└── sample_one.go

0 directories, 2 files

下面是源代码的样子:

sample_one.go

代码语言:javascript
复制
package main

var data map[string]string

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

sample_main.go

代码语言:javascript
复制
package main

import "fmt"

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

现在,当我尝试运行sample_main.go时,会收到错误,说明data是未定义的。

代码语言:javascript
复制
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

但是,当我将代码编译成二进制代码,然后执行它时,它就运行得很好。

代码语言:javascript
复制
✔ ~/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

我想知道为什么会有这种行为?

环境:

代码语言:javascript
复制
18:31 $ go version
go version go1.11.4 darwin/amd64

我发现最近的一篇文章是:Golang :命令行-参数未定义:变量

但这篇文章谈到了在main中定义的作用域变量。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-27 13:10:16

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

命令启动 编译并运行Go程序 用法: 运行构建标志包参数..。 Run编译并运行命名的主Go包。通常,包被指定为.go源文件列表,但它也可能是一个导入路径、文件系统路径或匹配单个已知包的模式,如“go run”中所示。或者“运行我的/cmd”。 编译包和依赖项 用法: 构建-o输出生成标志 Build编译由导入路径命名的包以及它们的依赖项,但是它没有安装结果。 如果要生成的参数是.go文件的列表,则生成将它们视为指定单个包的源文件列表。 有关指定包的更多信息,请参见“go帮助包”。有关软件包和二进制文件安装位置的更多信息,请运行“go help gopath”。

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

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

代码语言:javascript
复制
go run sample_main.go sample_one.go
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54388407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档