Golang init函数

函数特性

init函数作为Go的两个保留函数之一(另一个是main函数)有很多特殊性:

  • init函数没有入参和返回值
  • init函数不能被显式调用
  • 一个package中可以包含多个init函数
  • 一个go文件中可以包含多个init函数

何时调用

程序的初始化都从pkg main开始,如果main引入了其他package,在编译的时候就会将他们依次导入。初始化是在一个goroutine中进行的,init函数可以引入新的goroutine,但只有在当前init函数返回后才会执行下一个init,同一个package中多个init遵循文件名排序,不同package的init遵循引入顺序。具体参考下图:
这里写图片描述

示例

下面是stackoverflow的一个例子链接

package main

import "fmt"

var WhatIsThe = AnswerToLife()

func AnswerToLife() int {
	return 43
}

func init() {
	WhatIsThe = 0
}

func main() {
	if WhatIsThe == 0 {
		fmt.Println("It's all a lie.")
	}
}

执行结果是:It’s all a lie.

从初始化顺序图可知:先初始化全局变量WhatIsThe=43,然后执行init,将WhatIsThe置为0,最后执行main函数,得到结果:It’s all a lie.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值