标签:port 依赖关系 log name 字符串 tin www ash 自动调用
在一个 go 程序中通常包含:包、常量、变量、init()、main()等元素,如果同时存在多个包,包之间存在依赖关系,每个包中存在多个 init 函数,每个文件中存在多个 init 函数,那么问题来了,他们之间的执行顺序是什么样的?通过本文我们来对它们之间的执行顺序做尽可能详尽的说明。如有不正之处,欢迎批评指正。
go 程序的初始化顺序见下图:
init()、main() 是 go 语言中的保留函数,两个函数在 go 语言中的区别如下:
相同点:
不同点:
两个函数的执行顺序:
在同一个文件中,常量、变量、init()、main() 依次进行初始化。
1、在同一个 package 中,可以多个文件中定义 init 方法
2、在同一个 go 文件中,可以重复定义 init 方法
3、在同一个 package 中,不同文件中的 init 方法的执行按照文件名先后执行各个文件中的 init 方法
4、在同一个文件中的多个 init 方法,按照在代码中编写的顺序依次执行不同的 init 方法
5、对于不同的 package,如果不相互依赖的话,按照 main 包中 import 的顺序调用其包中的 init() 函数
6、如果 package 存在依赖,调用顺序为最后被依赖的最先被初始化,例如:导入顺序 main –> A –> B –> C,则初始化顺序为 C –> B –> A –> main,一次执行对应的 init 方法。
所有 init 函数都在同?个 goroutine 内执?。
所有 init 函数结束后才会执? main.main 函数。
标签:port 依赖关系 log name 字符串 tin www ash 自动调用
原文地址:https://www.cnblogs.com/tomhuang/p/11619787.html