Go中init()函数何时以及按什么顺序执行?
大家好!我刚开始学习Go,遇到了`init()`函数。文档中说它会自动执行,但我不明白:具体什么时候执行?如果包中有多个文件,每个文件都有init()会怎样?如果引入的第三方库也有init()呢?
这是我的例子。有一个`database`包,包含文件`db.go`:
```go
package database
import "fmt"
var Connection string
func init() {
fmt.Println("初始化数据库...")
Connection = "postgres://user:pass@localhost/mydb"
}
```
以及文件`main.go`:
```go
package main
import (
"fmt"
"myproject/database"
)
func init() {
fmt.Println("main中的init")
}
func main() {
fmt.Println(database.Connection)
}
```
我期望先执行database中的init,然后是main中的init,最后执行main()。但总是这样吗?如果我导入一个包,而这个包又导入了另一个带有init()的包呢?顺序有保证吗?能否依赖init()?