如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。更多往期文章在我的个人博客
Golang init() 函数
先举个例子

init() 是什么
在 Go 语言设计过程中保留了默认的两个函数,分别是 main() 和 init() 函数。
两者的区别在于:
- main()函数只能使用于- main包中,而且每个- main包只能有- 一个main()函数
- 但对于 init()函数, 则能够使用在所有的包中。而且一个程序(甚至一个文件)中可以写任意多个init()函数。注意:一个程序(甚至一个文件)中可以写任意多个 init()函数,但对于维护代码可读性、排查问题并没有任何好处
init() 特点
- init()用于- 程序运行前的进行包初始化(自定义变量、实例化通信连接)工作
- 每个包、- 每个程序文件可以同时拥有多个init(),但- 不建议
- 同一个包、文件中多个 init() 执行顺序, Golang 中并未明确
- 不同包的 init()执行顺序,按照导入包的依赖关系决定
- init()不能被其他函数调用,而自动- 在main函数执行前被调用
—— 参考来源于 effective_go
init() 什么时候执行
init() 函数 是 Golang 程序初始化 包含的一部分。
在 Golang 中程序的 初始化先于 main() 执行:具体由 runtime 初始化每个被导入的包。
- 初始化顺序是按照解析的依赖关系的顺序执行,没有依赖的包最先初始化。
- 首先初始化的是 每个包作用域内的常量、变量(其中:常量先于变量),之后执行包内init()。
- 相同一个包、文件可以同时拥有多个 init()。
- init() 和 main() 一样,没有任何参数和返回值,不能够被其他函数调用。
- 同一个包、文件 多个 init()执行顺序并未明确。
执行顺序总结: import –> const –> var –> init() –> main()
