存储在内存中的Golang包级别变量?

存储在内存中的Golang包级别变量?,go,Go,我环顾四周,找不到答案。Go包级别变量是如何存储的 假设我有 Package A var b = someFunction() func someFunction() {} 那我会的 Package C d := A.b e := A.b f := A.b 计算A.b时,发动机罩下会发生什么?它是否每次都调用someFunction?A.k.A.某个函数会被调用3次吗?或者该包类似于构建一次,而变量存储在内存中还是什么?所有全局变量只初始化一次。如果在初始化另一个全局变量时引用了一个全

我环顾四周,找不到答案。Go包级别变量是如何存储的

假设我有

Package A

var b = someFunction()

func someFunction() {}
那我会的

Package C

d := A.b
e := A.b
f := A.b

计算A.b时,发动机罩下会发生什么?它是否每次都调用
someFunction
?A.k.A.某个函数会被调用3次吗?或者该包类似于构建一次,而变量存储在内存中还是什么?

所有全局变量只初始化一次。如果在初始化另一个全局变量时引用了一个全局变量,则首先初始化被引用的变量。语言规范描述了初始化过程:


因此,在A.b的初始化过程中,someFunction只被调用一次,所有内容都存储在内存中,因为这就是存储内容的方式。这里的示例无效,因为
someFunction()
没有返回值,因此无法对其赋值。如果它有一个返回值,它将只被调用一次,因为它在源中只被调用一次。