go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性,
有下面的特征:
1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
2 每个包可以拥有多个init函数
3 包的每个源文件也可以拥有多个init函数
4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用
下面这个示例摘自《the way to go》,os差异在应用程序初始化时被隐藏掉了,
下面的两个go文件演示了:
1 一个package或者是go文件可以包含多个init函数,
2 init函数是在main函数之前执行的,
3 init函数被自动调用,不能在其他函数中调用,显式调用会报该函数未定义
gprog.go代码
ginit1.go代码,注意这个源文件中有两个init函数
编译上面两个文件:go build gprog.go ginit1.go
编译之后执行gprog.exe后的结果表明,gprog.go中的init函数先执行,然后执行了ginit1.go中的两个init函数,然后才执行main函数。
注:《the way to go》中(P70)有下面红色一句描述,意思是说一个go源文件只能有一个init函数,
但是上面的ginit1.go中的两个init函数编译运行后都正常执行了,
因此这句话应该是笔误。