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
```