Go 中 init 函数的特征?
在 Go 语言中,init
函数有一些特殊的特性:
- 自动执行:
init
函数在程序启动后自动被调用,无需手动调用。 -
每个包可以有多个
init
函数:一个包可以包含多个init
函数,它们都会在程序启动时执行。 -
包级别:
init
函数是包级别的,只能在包内部使用,不能被其他包调用。 -
执行顺序:
- 如果一个包导入了其他包,那么被导入的包的
init
函数会先执行。 - 如果一个包内有多个
init
函数,那么它们的执行顺序是不确定的。
- 如果一个包导入了其他包,那么被导入的包的
- 没有参数和返回值:
init
函数不接受任何参数,也没有返回值。
应用场景与例子:
init
函数通常用于进行一些初始化操作,例如初始化包级别的变量,或者在程序开始时执行一些必要的设置等。-
例如,如果我们需要在程序开始时连接数据库,那么可以在
init
函数中进行:
var db *sql.DB
func init() {
var err error
db, err = sql.Open("mysql", "user:password@/dbname")
if err != nil {
log.Fatal(err)
}
}
在上述代码中,我们在 init
函数中连接数据库并初始化 db
变量,这样其他函数就可以使用 db
变量进行数据库操作了。