Go init函数的 *作用 和 *细节 通俗易懂

作用:

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

package main
import "fmt"

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

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

}
结果:
init()....
main()....

通俗解释:

  • init函数,通常可以在init函数中完成初始化工作

init函数使用细节

  • 如果一个文件中同时包含全局变量定义, init函数和main函数,则执行的流程顺序为: 全局变量定义–> init函数 -->main 函数
  • 举例说明:
package main

import "fmt"

var age = test()
// 为了看到全局变量是先被初始化的,这里我们写个函数测试一下

func test() int {
	fmt.Println("test()...") //1
	return 18
}

func init (){
	fmt.Println("init()....") //2
}

func main()  {
	fmt.Println("main()....") //3 

}

结果:

结果


init函数最主要的作用

  • 为了更明了,我们实际场景说明:

比如说我们 main.go 文件需要用到另一个包的文件,注意是另一个,我们的目录结构是:
目录结构
我在another.go 文件中写了两个变量, Age 和 Name 变量,假如说我想在main.go 文件中调用这两个变量,并且我想让这两个变量初始化

another.go:

package anotherPack

var Age int
var Name string
// Age 和 Name 全局变量,我们需要在main.go 中使用
// 但是 我们需要初始化Age 和 Name 

// 那么我们就可以让 init函数完成初始化工作
func init() {
	Age = 100
	Name = "Tom~~"
}

main.go:

package main

import (
	"demo/anotherPack"
	"fmt"
)

func main()  {

	fmt.Println("Age=", anotherPack.Age, "Name=", anotherPack.Name)
}
---------------------
结果:			    |
Age= 100 Name= Tom 	|
---------------------

注意: 这里的运行顺序是 another.go 文件的里的 init函数先执行,man.go 文件里的init函数后执行

猜你喜欢

转载自blog.csdn.net/weixin_44355591/article/details/106532329