关于golang:GOinit函数

5次阅读

共计 764 个字符,预计需要花费 2 分钟才能阅读完成。

参考资料

五分钟了解 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()

正文完
 0