init函数
2022-02-20 大约 2 分钟
init函数又称为:初始化函数,可以用来进行一些初始化的操作。每一个源文件都可以包含一个init函数,该函数会在main函数执行前被GO运行框架调用。
# init函数
在main函数之前执行,通常用于一些初始化操作。
package main
import "fmt"
func init() {
fmt.Println("初始化函数init")
}
func main() {
fmt.Println("我是main函数")
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
PS E:\goProject\src\goCode\testProject01\unit2\main> go run .\main.go
初始化函数init
我是main函数
1
2
3
2
3
# 同一个源文件中函数的执行顺序
当我们有全局变量定义、init、main函数时它们的执行顺序是怎样的呢?
package main
import "fmt"
var num int = test()
func test() int {
fmt.Println("我是TEST函数")
return 10
}
func init() {
fmt.Println("初始化函数init")
}
func main() {
fmt.Println("我是main函数")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PS E:\goProject\src\goCode\testProject01\unit2\main> go run .\main.go
我是TEST函数
初始化函数init
我是main函数
1
2
3
4
2
3
4
结果:变量定义的test函数最先被执行,然后是init,最后是main函数。
# 多个源文件中Init函数的执行顺序
当多个源文件中都有init函数的时候,如何执行?
文件目录:
PS E:\goProject\src\goCode\testProject01\unit2> treee
unit2
├── main
│ └── main.go
└── testUtils
└── testUtils.go
1
2
3
4
5
6
2
3
4
5
6
// testUtils.go
package testUtils
import "fmt"
var Name string
var Age int
func init() {
fmt.Println("我是testUtils中的Init函数")
Name = "小明"
Age = 20
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
// main.go
package main
import (
"fmt"
"goCode/testProject01/unit2/testUtils"
)
var num int = test()
func test() int {
fmt.Println("我是main中的tset函数")
return 10
}
func init() {
fmt.Println("我是main中的初始化函数init")
}
func main() {
fmt.Println("我是main函数")
fmt.Println("名字是:", testUtils.Name, "年龄:", testUtils.Age)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PS E:\goProject\src\goCode\testProject01\unit2\main> go run .\main.go
我是testUtils中的Init函数
我是main中的tset函数
我是main中的初始化函数init
我是main函数
名字是: 小明 年龄: 20
1
2
3
4
5
6
2
3
4
5
6
由上面代码运行结果可知,外来文件的init函数先执行,然后是main中的变量定义的函数调用,然后是init,最后是main函数。