golang中的初始化顺序

栏目: Go · 发布时间: 7年前

内容简介:在一个go文件中, 初始化顺序规则: (1)引入的包 (2) 当前包中的变量常量 (3) 当前包的init (4)main函数文件结构如下.输出为
    1. 一个程序只能有一个main的package. 且pack main 会包含一个main的函数.
    1. pack main会包含多个其他的pack. 这里我们假设还有pack1, pack3.
    1. pack可能还会包含其他的pack. 这里我们假设 pack1. 还包含了 pack2 .
    1. 所有的 pack 都可以包含0个至多个init函数. 没错. 可以有多个init函数... ...

      现在讨论init的调用情况. 结论看起来是

    1. 包之间没有关系的情况下 . 按照import的先后顺序执行. 与包函数的调用顺序无关. ~~~ 静态编译
    1. 看起来是深度递归操作. 永远最先执行最后被包含的pack的init函数.
    1. 同一个pack的多个文件中的init函数是按照文件名的 排序 来执行的.
    1. 同一个pack的同一个文件也可以有多个init函数.... (神经病). 文本顺序执行.

在一个 go 文件中, 初始化顺序规则: (1)引入的包 (2) 当前包中的变量常量 (3) 当前包的init (4)main函数

文件结构如下.

.
|-- main.go
|-- pack1
|   |-- pack0.go
|   |-- pack1.go
|   `-- pack11.go
|-- pack2
|   `-- pack2.go
`-- pack3
    `-- pack3.go

输出为

test pack3 init
test pack2 init
test pack00 init
test pack1 init before
test pack1 init after
test pack11 init
main init
main

ps: 包级别的变量也是这么个初始化顺序.


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

乔纳森传

乔纳森传

利恩德·卡尼 / 汪琪 岳卉 王文雅 / 中信出版社 / 2014-1-1 / 49

抛开苹果公司,单就设计行业来讲,乔纳森也是一个特殊的人物。他推动了设计行业的大变革:不再为产品增加看起来炫得多的配件,而是要去掉多余的东西。 ——陈向东 终于有一本书能够如此地接地气:它不再关注那位神一样的乔布斯,而是关注那位站在神的背后,同样具有神一样光环的乔纳森。 ——孙陶然 乔纳森•艾夫把他自己对科学、人文、艺术,乃至整个世界的感知尽数渗透进苹果的设计和审美之中,他是......一起来看看 《乔纳森传》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器