我有以下代码:
main.go:
包主
进口( “FMT”
“./globalvar”
“github.com/Denton-L/gotest/usevar”)
func main(){ globalvar.GlobalNum = 42 fmt.Println(…
发生这种情况的原因是因为我们正在混合相对和远程进口。在main.go中, globalvar 包导入为 ./globalvar 但usevar / usevar.go将其导入为 github.com/Denton-L/gotest/globalvar 。因此,Go认为这些是具有自己的命名空间的独立包,因此,它们有自己独立的全局变量,恰好相同地命名。
globalvar
./globalvar
github.com/Denton-L/gotest/globalvar
为了解决这个问题,将相对导入更改为远程导入,因此main.go import语句应如下所示:
import ( "fmt" "github.com/Denton-L/gotest/globalvar" "github.com/Denton-L/gotest/usevar" )
这将让编译器知道它们实际上是相同的包,因此,全局变量将被共享。