1.init()、main()是go语言中的保留函数;init()函数用于初始化信息,main()函数用于程序执行的入口
2.相同点
- 两个函数在定义时不能有任何的返回值和参数
- 该函数只能由go程序自动调用,不可以被引用
3.不同点
- init可以应用于任何包中,且可以重复定义多个
- main函数只能用于main包中,且只能定义一个
4.两个函数的执行顺序
func init() {
fmt.Println("第一个init()函数")
}
func init() {
fmt.Println("第二个init()函数")
}
结果:
untils包下的until.go文件下第一个init()函数
untils包下的until.go文件下第二个init()函数
- 同一个package包中的不同文件,将文件名按字符串进行 “从小到大”排序,之后顺序调用个文件中的init()函数
untils包下的test1.go文件中的init()函数。。。
untils包下的until.go文件下第一个init()函数
untils包下的until.go文件下第二个init()函数
- 不同的package包,如果不互相依赖的话,按照import的顺序调用init()函数
import (
"Go_Advanced/pk1"
"Go_Advanced/utils"
)
结果:
pk1包下的init()函数
untils包下的test1.go文件中的init()函数。。。
untils包下的until.go文件下第一个init()函数
untils包下的until.go文件下第二个init()函数
untils包下的until.go文件下count()函数
pk1包下的MyTest1函数
- 如果pakage存在依赖,调用顺序为最后被依赖的最先被初始化;例如导入顺序 main->A->B->C, 则初始化顺序为 C->B->A->main