我试图找到一个精确的解释什么init()函数在Go(Golang)。我读了什么 Effective Go说,但我不确定如果我完全理解它说什么。我不确定的确切句子如下:

And finally means finally: init is called after all the variable declarations in the package have evaluated their initializers,and those are evaluated only after all the imported packages have been initialized.

包中的所有变量声明如何评估它们的初始化器是什么意思?这意味着如果你在一个包及其文件中声明“全局”变量,init()将不会运行,直到它被评估,然后它将运行所有的init函数,然后main()当./main_file_name运行?

我也读过Mark Summerfield的下面的书:

If a package has one or more init() functions they are automatically executed before the main package’s main() function is called.

在我的理解,init()只有当你打算运行main()的时候相关吗?或主包。任何人都能更精确地理解init()随时纠正我

是假设你有 this:
var WhatIsThe = AnswerToLife()

func AnswerToLife() int {
    return 42
}

func init() {
    WhatIsThe = 0
}

func main() {
    if WhatIsThe == 0 {
        fmt.Println("It's all a lie.")
    }
}

AnswerToLife()保证在调用init()之前运行,并且init()保证在调用main()之前运行。

请记住,init()总是被调用,不管有没有main,所以如果你导入一个包含init函数的包,它将被执行。

//编辑

另外,请记住,每个包可以有多个init()函数,它们将按照它们在代码中显示的顺序执行(当然所有变量都被初始化后)。

// edit 2x