为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我的全局变量没有跨包设置?

为什么我的全局变量没有跨包设置?

Go
慕标5832272 2023-06-12 15:34:36
我有以下代码:主要去: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"

)

这将使编译器知道它们实际上是同一个包,因此将共享全局变量。


查看完整回答
反对 回复 2023-06-12
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信