GOinit函数
Posted 一曲长歌一剑天涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GOinit函数相关的知识,希望对你有一定的参考价值。
参考资料
五分钟理解golang的init函数
1. golang程序初始化
golang程序初始化先于main函数执行,由runtime
进行初始化,初始化顺序如下:
- 初始化导入的包(包的初始化顺序并不是按导入顺序(“从上到下”)执行的,
runtime
需要解析包依赖关系,没有依赖的包最先初始化,与变量初始化依赖关系类似,参见golang变量的初始化); - 初始化包作用域的变量(该作用域的变量的初始化也并非按照“从上到下、从左到右”的顺序,
runtime
解析变量依赖关系,没有依赖的变量最先初始化,参见golang
变量的初始化); - 执行包的
init
函数;
2. 特点
go语言中init
函数用于包(package
)的初始化,该函数是go语言的一个重要特性。
init
函数是用于程序执行前做包的初始化的函数;- 每个包可以拥有多个
init
函数; - 包的每个源文件也可以拥有多个
init
函数; - 同一个包中多个
init
函数的执行顺序go语言没有明确的定义; - 不同包的
init
函数按照包导入的依赖关系决定该初始化函数的执行顺序; - init函数不能被其他函数调用,而是在
main
函数执行之前,自动被调用。main
包中,可以有init
函数 - 程序编译时,先执行导入包的
init
函数,再执行本包内的init
函数
3. 示例
main.go
package main
import (
"fmt"
)
var T int64 = a()
func init() {
fmt.Println("init in main.go ")
}
func a() int64 {
fmt.Println("calling a()")
return 2
}
func main() {
fmt.Println("calling main")
}
输出:
calling a()
init in main.go
calling main
初始化顺序:变量初始化->init()->main()
以上是关于GOinit函数的主要内容,如果未能解决你的问题,请参考以下文章