1.1.1. init函数。
每一个源文件都可以包含一个 init 函数,该函数会在 main 函数执行前,被 Go 运行框架调用,也就是说 init 会在 main 函数前被调用。
例子如下:
func init() {
fmt.Println(" init()....... ")
}
func main() {
fmt.Println(" main()....... ")
}
运行结果:
init().......
main().......
1.1、 如果一个文件同时包含全局变量定义,init 函数和 main 函数,则执行的流程:全局变量定义->init 函数->main 函数。
例子如下:
/**
执行流程:
1、先初始化全局变量。执行 test()函数
2、init 函数
3、main 函数
*/
var name = test()
func test() string {
fmt.Println(" test()....... ")
return ""
}
func init() {
fmt.Println(" init()....... ")
}
func main() {
fmt.Println(" main()....... ")
}
运行结果:
test().......
init().......
main().......
1.2、 如果一个文件main包里面引入了其他包。那先加载引入包的所有源文件,对引入的包所有源文件执行:全局变量定义->init 函数;然后再执行main文件的:全局变量定义->init 函数->main 函数。
例子如下:
module1包的test.go文件内容:
package module1
import "fmt"
func init() {
fmt.Println("module1 包 test 文件 init() 。。。。。。")
}
func Add(a int,b int) int {
fmt.Println("module1 包 test 文件 Add() 。。。。。。")
return a + b
}
module1包的test2.go文件内容:
package module1
import "fmt"
func init() {
fmt.Println("module1 包 test2 文件的 init() 。。。。。。")
}
main包的内容:
package main
import (
"fmt"
"hanShuDemo2/module1"
)
var name = test()
func test() string {
fmt.Println("main 包的 初始化全局变量 test()....... ")
return ""
}
func init() {
fmt.Println("main 包的 init()....... ")
}
func main() {
fmt.Println("main 包的 main()....... ")
module1.Add(4,5)
}
执行结果:
module1 包 test 文件 init() 。。。。。。
module1 包 test2 文件的 init() 。。。。。。
main 包的 初始化全局变量 test().......
main 包的 init().......
main 包的 main().......
module1 包 test 文件 Add() 。。。。。。