作者:飞上天的鱼 | 来源:互联网 | 2024-10-22 18:45
今天来了解一下Go语言中的init函数
Go语言中有两个保留的函数:main函数和init函数
init函数的特性如下:
init函数没有参数和返回值;
init函数不能被其他函数调用,只能被Go程序自动调用;
一个package中可以包含多个init函数;
一个go文件中可以包含多个init函数;
最好一个go文件中只写一个init函数;
init函数与main函数的区别:
init可以应用于任意包中,且可以重复定义多个;
main函数只能用于main包中,且只能定义一个。
init函数和main函数的执行顺序,导包的顺序,常量、变量的初始化顺序:
程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依此类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。过程如下:
init函数的常见作用:
初始化不能采用初始化表达式初始化的变量;
检查/修复程序的状态;
程序运行前的注册;
运行一次计算;
实现sync.Once功能。
参考文章:
go中的main函数和init函数
Golang init函数
Go init函数详解
五分钟理解golang的init函数
Go 中的 init 函数