我有以下代码:主要去:package mainimport ( "fmt" "./globalvar" "github.com/Denton-L/gotest/usevar")func main() { globalvar.GlobalNum = 42 fmt.Println(globalvar.GlobalNum) usevar.PrintGlobal()}使用变量/使用变量.go:package usevarimport ( "fmt" "github.com/Denton-L/gotest/globalvar")func PrintGlobal() { fmt.Println(globalvar.GlobalNum)}globalvar/globalvar.go:package globalvarvar GlobalNum int我正在编译go build main.go。当我跑步时./main,我得到420作为输出,但我期待4242为什么会这样?编辑:请注意,我能够访问全局变量,但它们包含意外值,因此这不是Golang Global Variable access的副本。
1 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
发生这种情况的原因是因为我们混合了相对和远程导入。在 main.go 中,globalvar包被导入为,./globalvar但 usevar/usevar.go 将其导入为github.com/Denton-L/gotest/globalvar. 因此,Go 将它们视为具有自己命名空间的独立包,因此,它们具有自己独立的全局变量,这些变量碰巧被命名为相同的。
为了解决这个问题,将相对导入更改为远程导入,因此 main.go 导入语句应该如下所示:
import (
"fmt"
"github.com/Denton-L/gotest/globalvar"
"github.com/Denton-L/gotest/usevar"
)
这将使编译器知道它们实际上是同一个包,因此将共享全局变量。
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消