作用:
每一个源文件都可以包含一个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函数后执行