【发布时间】: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