Emove

  • 首页
  • 归档
  • 分类
  • 标签

  • 搜索
context 反射 channel LRU BeanDefinition JVM 装饰者模式 MyBatis 快慢指针 归并排序 链表 hash表 栈 回溯 贪心 主从复制 二分查找 双指针 动态规划 AOF RDB 规范 BASE理论 CAP B树 RocketMQ Sentinel Ribbon Eureka 命令模式 访问者模式 迭代器模式 中介者模式 备忘录模式 解释器模式 状态模式 策略模式 职责链模式 模板方法模式 代理模式 享元模式 桥接模式 外观模式 组合模式 适配器模式 建造者模式 原型模式 工场模式 单例 UML 锁 事务 sql 索引

init函数和main函数

发表于 2020-10-16 | 分类于 Go | 0 | 阅读次数 55

1、init函数

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性。有以下这些特征:

1、init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
2、每个包可以拥有多个init函数
3、包的每个源文件也可以拥有多个init函数
4、同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
5、不同包的init函数按照包导入依赖关系决定改初始化函数的执行顺序
6、init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

2、main函数

go语言程序的默认入口函数(主函数):func main()函数体用{}一对括号包裹

func main() {
    // 函数体
}

3、init函数与main函数的异同

  • 相同点:两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用
  • 不同点:
    • init可以应用于任意包中,且可以重复定义多个
    • main函数只能用于main包中,且只能定义一个

两个函数的执行顺序:

  1. 对同一个go文件中的init()调用顺序是从上到下的
  2. 对同一个package中不同文件是按照文件名字符串比较从小到大顺序调用个文件中init()函数
  3. 对于不同的package,如果不相互依赖的话,按照main包中“先import的后调用”的顺序调用其包中的init(),最后调用main()函数
  4. 如果init函数中使用了println()或者print()你会发现在执行过程中这两个不会按照你想象的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用
# context # 反射 # channel # LRU # BeanDefinition # JVM # 装饰者模式 # MyBatis # 快慢指针 # 归并排序 # 链表 # hash表 # 栈 # 回溯 # 贪心 # 主从复制 # 二分查找 # 双指针 # 动态规划 # AOF # RDB # 规范 # BASE理论 # CAP # B树 # RocketMQ # Sentinel # Ribbon # Eureka # 命令模式 # 访问者模式 # 迭代器模式 # 中介者模式 # 备忘录模式 # 解释器模式 # 状态模式 # 策略模式 # 职责链模式 # 模板方法模式 # 代理模式 # 享元模式 # 桥接模式 # 外观模式 # 组合模式 # 适配器模式 # 建造者模式 # 原型模式 # 工场模式 # 单例 # UML # 锁 # 事务 # sql # 索引
AbstractBeanDefinition及其子类
defer
  • 文章目录
  •   |  
  • 概览
林亦庭

林亦庭

less can be more

87 文章
11 分类
54 标签
RSS
Github
Creative Commons
© 2021 林亦庭
粤ICP备20029050号