Golang中init() 函数是什么时候执行的?
在 Go 语言中,init()
函数是一种特殊的函数,它在每个包完成初始化后自动执行。这意味着,你不能在代码中显式地调用 init()
函数,它由 Go 运行时系统自动调用。初始化顺序为:
- 如果一个包被导入多次,
init()
函数只会被执行一次。 - 包的初始化顺序为:首先初始化包级别(Package Level)的变量,然后是
init()
函数。如果一个包导入了其他包,会先初始化被导入的包。 - 即使一个包被多个其他包导入,它的
init()
函数也只会被执行一次。 - 在同一个包内,多个
init()
函数的执行顺序为它们在 Go 语言中,init()
函数是一种特殊的函数,它在每个包完成初始化后自动执行。这意味着,你不能在代码中显式地调用init()
函数,它由 Go 运行时系统自动调用。初始化顺序为: -
如果一个包被导入多次,
init()
函数只会被执行一次。 - 包的初始化顺序为:首先初始化包级别(Package Level)的变量,然后是
init()
函数。如果一个包导入了其他包,会先初始化被导入的包。 - 即使一个包被多个其他包导入,它的
init()
函数也只会被执行一次。 - 在同一个包内,多个
init()
函数的执行顺序为它们在代码中的出现顺序。
这是一个简单的例子:
package main
import "fmt"
var foo = initFoo()
func initFoo() int {
fmt.Println("Initializing variable...")
return 42
}
func init() {
fmt.Println("Executing init function...")
}
func main() {
fmt.Println("Executing main function...")
fmt.Println("Foo:", foo)
}
在这个例子中,程序的输出会是:
Initializing variable...
Executing init function...
Executing main function...
Foo: 42
这显示了 Go 语言初始化的顺序:首先初始化包级别的变量(在这里是 foo
),然后执行 init()
函数,最后是 main()
函数。