go语言有函数在main之前执行吗?


go语言的init函数在main函数之前执行,它有如下特点:

func init() {
    ...
}

init函数非常特殊:

初始化不能采用初始化表达式初始化的变量;
程序运行前执行注册
实现sync.Once功能
不能被其它函数调用
init函数没有入口参数和返回值:
每个包可以有多个init函数,每个源文件也可以有多个init函数。
同一个包的init执行顺序,golang没有明确定义,编程时要注意程序不要依赖这个执行顺序。
不同包的init函数按照包导入的依赖关系决定执行顺序。