init()函数何时运行?

init()函数何时运行?,第1张

init()函数何时运行?

是假设你有这样:

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()
每个程序包可以具有多个功能。它们将按照它们在文件中显示的顺序执行(当然,在初始化所有变量之后)。如果它们跨越多个文件,则将按词汇文件名顺序执行:

似乎

init()
函数是按词法文件名顺序执行的。Go规范说:“鼓励构建系统以词法文件名的顺序向编译器提供属于同一软件包的多个文件”。看来
gobuild
这种方式。


许多内部Go软件包用于

init()
初始化表等,例如https://github.com/golang/go/blob/883bc6/src/compress/bzip2/bzip2.go#L480



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4883649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-11
下一篇 2022-11-11

发表评论

登录后才能评论

评论列表(0条)

保存