内容简介:init()和main()方法是golang默认的两个方法,不需要我们调用,程序执行会自动寻找项目中的这俩方法。现在我们就讲一种通用的情况:main 包下 导入了 init2 包而在init2 包下又导入了init3 包,三个包下都有自己的init 方法,初始化的顺序又是怎么的呢?先看一段代码:
init()和main()方法是golang默认的两个方法,不需要我们调用,程序执行会自动寻找项目中的这俩方法。现在我们就讲一种通用的情况:
main 包下 导入了 init2 包而在init2 包下又导入了init3 包,三个包下都有自己的init 方法,初始化的顺序又是怎么的呢?
先看一段代码:
// demo_init1.go
package main
import "golang_thinking/src/article_init/init2"
import "fmt"
var VariableMain = "variable_main"
const ConstantMain = "constant_main"
func init() {
fmt.Printf("ConstantMain is %s \n",ConstantMain)
fmt.Printf("VariableMain is %s \n", VariableMain)
}
func main() {
fmt.Print("execute main method... \n")
init2.Init2()
}
程序不会先初始化demo_init1.go 里的,常量,变量,init() ,而是先会初始化init2包
demo_init2.go 代码如下:
// demo_init2.go
package init2
import "fmt"
import "golang_thinking/src/article_init/init3"
var VariableInit2 = "init2_variable"
const ConstantInit2 = "init2_constant"
func init() {
fmt.Printf("ConstantInit2 is %s \n",ConstantInit2)
fmt.Printf("VariableInit2 is %s \n",VariableInit2)
}
func Init2() {
fmt.Print("Init2 method... \n")
init3.Init3()
}
同时又引入了init3包,包内文件demo_init3.go 代码如下:
// demo_init3.go
package init3
import "fmt"
var VariableInit3 = "variable_init3"
const ConstantInit3 = "constant_init3"
func init() {
fmt.Printf("VariableInit3 is %s \n",VariableInit3)
fmt.Printf("ConstantInit3 is %s \n",ConstantInit3)
}
func init() {
fmt.Printf("一个包中最好只出现一个init方法\n")
}
func Init3() {
fmt.Print("Init3 method...\n")
}
最后贴出控制台的打印:
10.jpg
分析:先分析输出的中文:“一个包中最好只出现一个init方法”,这是demo_init3.go 的第二个init()方法里输出的内容,要说明的是,同一个包下可以有多个init方法,按init出现的顺序初始化,但是建议还是一个init为好;
从打印的顺序可以看出,是先初始化init3包下的init(),然后是init2包下init()方法,最后是main包下的init()方法。
最后初始化顺序总结下:开始是先在main包下,如果引入了其他包,就跳到其他包下初始化常量,变量,init()方法,如果又引入了其他包就又优先再其他包下按这个顺序初始化,以此类推。还要说明的是,如果导入的两个包中又都引入的第三个包,第三个包不会初始化两次,只会一次。
代码地址: https://github.com/wjsoho/golang_thinking/tree/master/src/article_init
以上所述就是小编给大家介绍的《golang init方法和main方法初始化顺序》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- iOS 指定初始化方法
- iOS开发规范篇:清晰的初始化方法
- 在 Java 中初始化 List 的五种方法
- java编程——从jvm角度看懂类初始化、方法重写、重载
- Scala – 在已经声明的数组中初始化值的最优雅的方法?
- 不用批归一化也能训练万层ResNet,新型初始化方法Fixup了解一下
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大连接
[美] 尼古拉斯•克里斯塔基斯(Nicholas A. Christakis)、[美] 詹姆斯•富勒(James H. Fowler) / 简学 / 中国人民大学出版社 / 2013-1 / 59.90元
[内容简介] 1. 本书是继《六度分隔》之后,社会科学领域最重要的作品。作者发现:相距三度之内是强连接,强连接可以引发行为;相聚超过三度是弱连接,弱连接只能传递信息。 2. 本书讲述了社会网络是如何形成的以及对人类现实行为的影响,如对人类的情绪、亲密关系、健康、经济的运行和政治的影响等,并特别指出,三度影响力(即朋友的朋友的朋友也能影响到你)是社会化网络的强连接原则,决定着社会化网络的......一起来看看 《大连接》 这本书的介绍吧!