init() 函数什么时候运行?
init() 函数是 Go 中的一个特殊函数,在 main 之前调用() 函数的封装。它通常用于初始化变量和其他设置任务。但是,Effective Go 中的以下这句话到底是什么意思:
“Andfinally 的意思是finally:init 在包中的所有变量声明都评估了它们的初始值设定项之后被调用,并且只有在所有导入的包之后才评估它们已初始化。”
这意味着 init() 函数在当前包中的所有全局变量以及任何导入的包都已使用默认值初始化后运行。需要注意的是,初始化的顺序是基于包文件的词汇顺序,而不是声明导入的顺序。
例如:
var GlobalVar1 = 10 func init() { GlobalVar1 = 20 } func main() { // GlobalVar1 is 20 }
在此示例中,在 GlobalVar1 初始化为 10 之后调用 init() 函数,并在 main() 函数执行之前将 GlobalVar1 的值覆盖为 20。
值得一提的是,无论包是否有 main() 函数,init() 函数都会被调用。这意味着,如果您导入具有 init() 函数的包,它将在您自己包的 init() 函数之前执行。
此外,可以在单个包中定义多个 init() 函数包,并且它们将按照它们在源文件中出现的顺序执行。这允许您按特定顺序执行多个初始化任务。
以上是Go 的 init() 函数到底什么时候运行?的详细内容。更多信息请关注PHP中文网其他相关文章!