Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据测试

有没有颠覆你的认知:Main方法一定是入口方法吗?

目录

 

前言

正文 


前言

作为一名程序员,一定对main方法非常熟悉,一般我们会认为main方法就是执行程序的入口方法。程序首先执行main方法,真的是这样吗?

正文 

main方法到底是不是程序执行的入口方法呢?这里先卖个关子。

首先来看一段Go的代码:

// Declaration of the main package 
package main 

// Importing package 
import "fmt"

// One init() function 
func init() { 
	fmt.Println("Welcome to init() function") 
} 

// Main function 
func main() { 
	fmt.Println("Welcome to main() function") 
} 

输出结果:

Welcome to init() function
Welcome to main() function 

看到这里有没有发现什么?init()方法居然在main方法之前执行了,是不是和我们传统认知有出入。不仅如此,再来看一个:

// Declaration of the main package 
package main 

// Importing package 
import "fmt"

// One init() function 
func init() { 
	fmt.Println("Welcome to init() function") 
} 

// Another init() function
func init() { 
	fmt.Println("Another init() function") 
} 

// Other function
func other() {
	fmt.Println("Other function can not be called befor main()")
}

// Main function 
func main() { 
	fmt.Println("Welcome to main() function") 
} 

输出结果:

Welcome to init() function
Another init() function
Welcome to main() function 

看到这里是不是又很惊讶,init()方法居然可以定义多个,而且还都正常执行了。同样为了区分,在代码中增加了一个对比方法other(),它不被主动调用是不会执行的。

说明init()方法是优先main()方法调用执行的,不仅Golang如此,C++也是这样的,在执行main()方法之前,会有很多类似init()方法的初始化操作,特别是加载环境变量等系统配置信息。

另外,一张图非常形象的反映了整个调用过程:

通过上图我们还可以得出如下结论:

尽管main()方法不一定是执行程序的入口方法,但是一个执行程序确实只有一个main()方法。 

Data-Mining CSDN认证博客专家 CSDN博客专家
敲代码,搞开发。
本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。
博客主页地址:https://liuzhen.blog.csdn.net/
欢迎沟通交流学习!

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: C++面试常见问答题100例(上)

下一篇: 从0到1设计一台8bit计算机

精华推荐