是的,假设你有这个:
var WhatIsThe = AnswerToLife()func AnswerToLife() int { // 1 return 42}func init() { // 2 WhatIsThe = 0}func main() { // 3 if WhatIsThe == 0 { fmt.Println("It's all a lie.") }}AnswerToLife()保证在
init()被调用之前运行,并且
init()保证在
main()被调用之前运行。
请记住
init(),无论是否存在 main ,它始终被调用,因此如果您导入具有
init函数的包,它将被执行。
此外,
init()每个包可以有多个功能;它们将按照它们在文件中显示的顺序执行(当然是在所有变量初始化之后)。如果它们跨越多个文件,它们将按词法文件名顺序执行:
似乎
init()函数是按词法文件名顺序执行的。Go 规范说“鼓励构建系统以词法文件名顺序将属于同一包的多个文件呈现给编译器”。似乎是这样go build工作的。



