1. 基本介绍

每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用,也就是说init会在main函数前被调用。

案例说明:

package main
import (
	"fmt"
)

// init函数,通常可以在init函数中完成初始化工作
func init() {
	fmt.Println("init() ...")
}

func main() {
	fmt.Println("main() ...")
}

输出结果是:

2. init函数的注意事项和细节

1) 如果一个文件同时包含全局变量定义,init函数和main函数,则执行的流程:全局变量定义 -> init函数  ->  main函数

package main
import (
	"fmt"
)

var age = test() // 1

// 为了看到全局变量是先被初始化的,我们这里先写函数
func test() int{
	fmt.Println("test()")
	return 90
}

// init函数,通常可以在init函数中完成初始化工作
func init() {   // 2
	fmt.Println("init() ...")
}

func main() { //  3 
	fmt.Println("main() ... age=",age)
}

 2)init函数最主要的作用,就是完成一些初始化的工作,比如下面的案例

 

 3)细节说明:面试题: 如果main.go和utils.go 都含有变量定义,init函数时,执行的流程是什么样的呢?