首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的全局变量没有跨包设置?

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

Stack Overflow用户
提问于 2019-03-02 07:48:28
回答 1查看 387关注 0票数 -2

我有以下代码:

main.go:

package main

import (
    "fmt"

    "./globalvar"

    "github.com/Denton-L/gotest/usevar"
)

func main() {
    globalvar.GlobalNum = 42
    fmt.Println(globalvar.GlobalNum)
    usevar.PrintGlobal()
}

usevar/usevar.go:

package usevar

import (
    "fmt"

    "github.com/Denton-L/gotest/globalvar"
)

func PrintGlobal() {
    fmt.Println(globalvar.GlobalNum)
}

globalvar/globalvar.go:

package globalvar

var GlobalNum int

我正在用go build main.go编译。当我运行./main时,我得到

42
0

作为输出,但我期望

42
42

为什么会发生这种情况?

编辑:请注意,我可以访问全局变量,但它们包含意想不到的值,因此这不是Golang Global Variable access的副本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-02 07:53:34

之所以会发生这种情况,是因为我们混合了相对导入和远程导入。在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"
)

这将让编译器知道它们实际上是相同的包,因此,全局变量将被共享。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54953841

复制
相关文章

相似问题

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