Avatar ·

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()?