golang init和main函数
2016-07-06 12:38
211 查看
Go里面有两个保留的函数:init函数和main函数。下边就来比较一下两个函数的异同。
相同点:两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
不同点:init可以应用于任意包中,且可以重复定义多个。main函数只能用于main包中,且只能定义一个。
下边说一下两个函数的执行顺序:
对同一个go文件的init()调用顺序是从上到下的
对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数,对于
对不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init()
如果package存在依赖,则先调用最早被依赖的package中的init()
最后调用main函数
下图截自astaxie的《Go Web 编程》
ps:如果init函数中使用了println或者print 你会发现在执行过程中这两个不会按照你想象中的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用。
转自http://studygolang.com/articles/3873
相同点:两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
不同点:init可以应用于任意包中,且可以重复定义多个。main函数只能用于main包中,且只能定义一个。
下边说一下两个函数的执行顺序:
对同一个go文件的init()调用顺序是从上到下的
对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数,对于
对不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init()
如果package存在依赖,则先调用最早被依赖的package中的init()
最后调用main函数
下图截自astaxie的《Go Web 编程》
ps:如果init函数中使用了println或者print 你会发现在执行过程中这两个不会按照你想象中的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用。
转自http://studygolang.com/articles/3873
相关文章推荐
- 《Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center》 论文解读
- int main(int argc, char **argv, char **envp)
- gradle project sync failed.Basic functionality(e.g.editing,debugging) will not work
- CodeForces 687B Remainders Game(数学,最小公倍数)
- HDU 5293 Tree chain problem(树形DP+树链剖分)
- tensorflow之准备好自己的train.txt和val.txt
- 通过ServiceManager统一管理aidl服务
- CodeForces 160C Find Pair
- determining IP information for eth0...failed
- CodeForces 687B - Remainders Game(中国剩余定理)
- Trailing Zeros
- Reverse Pairs
- Leetcode Contains Duplicate II
- Leetcode Contains Duplicate
- Failed to create prime the NuGet cache
- Maintaining Your Signing Identities and Certificates 维护你的签名标识和证书
- POJ3714 Raid
- POJ 1995 Raising Modulo Numbers
- foxmail:错误信息:由于连接方在一段时间后没有正确答复或连接的主机没有反应.
- AIDL使用笔记