我试图找到一个关于init()函数在Go中的作用的精确解释。我读了Effective Go说的话,但我不确定我是否完全理解了它说的话。我不太确定的句子是:
finally的意思是最后:init是在包中所有变量声明都计算了它们的初始化式之后调用的,并且只有在所有导入的包都初始化之后才会计算这些初始化式。
包中所有变量声明对其初始化式求值意味着什么?这是否意味着如果你在一个包和它的文件中声明“全局”变量,init()将不会运行,直到所有的它被评估,然后它将运行所有的init函数,然后main()当。/main_file_name运行?
我还读了Mark Summerfield的书:
如果一个包有一个或多个init()函数,它们会在主包的main()函数被调用之前自动执行。
在我的理解中,init()只在您打算运行main()时才相关,对吗?如果有人更清楚地理解init(),请随意纠正我
这里是另一个例子- https://play.golang.org/p/9P-LmSkUMKY
package main
import (
"fmt"
)
func callOut() int {
fmt.Println("Outside is beinge executed")
return 1
}
var test = callOut()
func init() {
fmt.Println("Init3 is being executed")
}
func init() {
fmt.Println("Init is being executed")
}
func init() {
fmt.Println("Init2 is being executed")
}
func main() {
fmt.Println("Do your thing !")
}
上面程序的输出
$ go run init/init.go
Outside is being executed
Init3 is being executed
Init is being executed
Init2 is being executed
Do your thing !