14.init你用对了吗?

本文探讨了 Go 语言中的 init 函数,包括它们的执行顺序、程序初始化流程以及如何利用 init 函数检查包级变量的初始状态。在 Go 中,init 函数用于包的初始化工作,它们按照导入顺序和源文件声明顺序执行,不依赖于程序员的直接调用。此外,文章还提到了在 init 函数中进行包级变量初始化、注册模式和错误处理的方法。
摘要由CSDN通过智能技术生成

本文视频地址

在 Go 语言中,通过包的 init 函数来完成初始化的工作。

1. init 函数

Go 语言中有两个特殊的函数:
1) main 包中的 main 函数,它是所有 Go 可执行程序的入口函数;
2) 包级别的 init 函数。
init 函数是一个无参无返回值的函数:

func init() {
        ...
}

如果一个包定义了 init 函数,Go 运行时会负责在该包初始化时调用它的 init 函数。我们不能显式调用 init,否则会在编译期间报错。

一个 Go 包可以拥有多个 init 函数,每个组成包的源文件中亦可以定义多个 init 函数。在初始化该包时,Go 运行时会按照一定的次序逐一顺序地调用该包的 init 函数。每个 init 函数在整个 Go 程序生命周期内仅会被执行一次。因此,init 函数可以做一些包级初始化以及包级数据初始状态的检查工作。
一般来说,先被传递给 Go 编译器的源文件中的 init 函数先被执行;同一个源文件中的多个 init 函数按声明顺序依次执行。在Go 语言中:不要依赖 init 函数的执行次序。

2. 程序初始化顺序

除了 init 函数是顺序执行并仅被执行一次之外,Go 程序初始化顺序也给 init 函数提供了前提条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值