Go(Golang)中的init()函数是什么时候运行?
我试图找到一个精确的解释什么init()函数在Go(Golang)。我读了什么
Effective Go说,但我不确定如果我完全理解它说什么。我不确定的确切句子如下:
包中的所有变量声明如何评估它们的初始化器是什么意思?这意味着如果你在一个包及其文件中声明“全局”变量,init()将不会运行,直到它被评估,然后它将运行所有的init函数,然后main()当./main_file_name运行? 我也读过Mark Summerfield的下面的书:
在我的理解,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 很多内部的Go包使用init()来初始化表等,例如https://github.com/golang/go/blob/883bc6/src/compress/bzip2/bzip2.go#L480 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |