go中的main函数和init函数
2016-02-01 23:29
363 查看
原文:/Uploads/Images/Content/202012/14/f7b28b9f9f9cfb8144cb46c99aaa5595
Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package
main)。这两个函数在定义时不能有任何的参数和返回值。虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。
Go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package
main就必须包含一个main函数。
程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:
Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package
main)。这两个函数在定义时不能有任何的参数和返回值。虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。
Go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package
main就必须包含一个main函数。
程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:
相关文章推荐
- visio ppt axure AI svg powerdesign xmind
- visio ppt axure AI svg powerdesign xmind
- poj3691 DNA repair dp AC自动机
- HDU 5618 Jam's problem again
- main函数
- Light OJ 1021 Painful Bases (状压DP)
- Spark PairRDD 转化一
- Firemonkey 调整 MainMenu 字型大小 (D10)
- synchronized/wait/notify 与 mutex/cond wait wake ~ 链表队列 生产消费问题
- UVA 11168 Airport(凸包+直线方程)
- hdu1022 Train Problem I
- jraiser模块加载执行简要总结
- command/usr/bin/codesign failed with exit code 1- code sign error
- spark的task调度器(FAIR公平调度算法)
- 关于 conversion to dalvik fail with error 1
- bug记录:Mybatis-error:Parameter 'xxx' not found. Available parameters are [list]
- RAID详解
- intel Baytrail 平台audio驱动match流程
- filco minila air在debian下的蓝牙适配安装
- waitpid函数实例