Avatar ·

Go 中 init() 函数何时以及按什么顺序执行?

大家好!我刚开始学习 Go,遇到了一个不太明白的地方。文档中说,在包中可以声明一个自动执行的 `init()` 函数。但我完全搞不清楚它具体在什么时候运行,以及如果有多个这样的函数,它们的执行顺序是怎样的。 我有一个由三个文件组成的小项目。在 `main` 包中,我定义了一个打印 "main init" 的 `init()` 函数。在同一包的另一个文件中,我声明了另一个 `init()` 函数,用于递增一个计数器。在导入的 `config` 包中,也有自己的 `init()` 函数,用于读取配置。我本以为它们会按某种逻辑顺序执行,但程序运行时的输出结果却不太明显。 以下是代码示例: ```go // main.go package main import "fmt" var counter int func init() { fmt.Println("First init in main") counter = 10 } func main() { fmt.Println("Main function, counter =", counter) } ``` ```go // extra.go (同样属于 package main) package main ```