Golang中init() 函数是什么时候执行的?

在 Go 语言中,init() 函数是一种特殊的函数,它在每个包完成初始化后自动执行。这意味着,你不能在代码中显式地调用 init() 函数,它由 Go 运行时系统自动调用。初始化顺序为:

  1. 如果一个包被导入多次,init() 函数只会被执行一次。
  2. 包的初始化顺序为:首先初始化包级别(Package Level)的变量,然后是 init() 函数。如果一个包导入了其他包,会先初始化被导入的包。
  3. 即使一个包被多个其他包导入,它的 init() 函数也只会被执行一次。
  4. 在同一个包内,多个 init() 函数的执行顺序为它们在 Go 语言中,init() 函数是一种特殊的函数,它在每个包完成初始化后自动执行。这意味着,你不能在代码中显式地调用 init() 函数,它由 Go 运行时系统自动调用。初始化顺序为:

  5. 如果一个包被导入多次,init() 函数只会被执行一次。

  6. 包的初始化顺序为:首先初始化包级别(Package Level)的变量,然后是 init() 函数。如果一个包导入了其他包,会先初始化被导入的包。
  7. 即使一个包被多个其他包导入,它的 init() 函数也只会被执行一次。
  8. 在同一个包内,多个 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() 函数。

发表评论

后才能评论