init函数的执行时机
- 这个涉及到
- init 函数的作用和执行顺序
- 相同个文件和不同文件中以及在不同的包中init的执行顺序
- go文件初始化的顺序
一、init 函数的作用和执行顺序
作用
- init 函数是用于程序执行前做包的初始化的函数,比如初始化包里面的一些变量等等
- 通常在项目工程中,用来做 Http Server的初始化,DB的初始化, redis 初始化等等中间件的初始化
执行顺序
- 在同一个 Go 文件可以重复定义多个 init 方法, 它的执行顺序是按照代码编写的顺序依次执行
- 在同一个 package 里面,不同文件中的 init 方法的执行是按照文件名的顺序先后执行各个文件当中的init方法的
- 对于不同的package
- 如果不相互依赖的话,就会按照main包里面 import 的顺序,调用各个包中的init函数
- 存在依赖,调用顺序就变成最后被依赖的会最先被初始化
- 比如我们的导入顺序是在main函数中依赖a模块
- a模块又依赖b模块,b模块又依赖c模块
- 初始化的顺序就会先初始化c这个包再初始化b这个包再初始化a这个包
- 最后执行main方法
测试 同一个 Go 文件可以重复定义多个 init 方法
main.go
package main
import (
. "fmt"
)
// 同一个go文件中的多个init方法,按照定义的顺序执行
func init() {
Println(1)
}
func init() {
Println(2)
}
func main() {
}
- 运行 $
go run main.go
- 输出
1