Golang的init函数和main函数

一、init函数

在Go中,init函数是用于程序执行前做包(package)的初始化的函数,比如初始化包里的变量等。

  • 每一个包(package)中都可以写多个init函数,但是就维护来说,建议用户在一个包中的每个文件只写一个init函数。
  • 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
  • init函数是Go程序自动调用的,不能被其他函数调用。(在main函数执行之前,会被自动调用)

二、main函数

像其他编程语言一样,main函数也是Go语言程序的默认入口。

func main(){
        ......
    }
  • 与init函数不同,main函数只能存在于mian包,且一个程序的mian包里只能定义一个main函数
  • 程序的初始化和执行都起始于main包。
  • main函数是Go程序自动调用的,不能被其他函数调用。

三、init函数和main函数的异同点

相同点:

  1. 两个函数在定义时不能有任何的参数和返回值
  2. 两个函数都是由Go程序自动调用的,不能被调用

不同点:

  1. init可以应用于任意包中,且可以重复定义多个。
  2. main函数只能用于main包中,且只能定义一个。

四、init函数和main函数的调用流程

函数的执行顺序的理解关键点:

  • 同一个go文件的init()调用顺序是从上到下的。
  • 同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数。
  • 对于不同的package,
  • 如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init()
  • 如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数。如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数。
    在这里插入图片描述
    (图引用的是谢大的Go Web编程)

本文参考了谢大的Go Web编程

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值