InitOrder初始化执行顺序
包的引用,函数执行顺序
代码结构
|-- go-algorithm(根目录)
|-- A
| |-- a.go
|-- B
| |-- b.go
└ -- main.go
a.go
package A
import "fmt"
func init() {
A1()
}
func A1() {
fmt.Println("a.1(只是init)")
}
func A2() {
fmt.Println("a.2")
}
b.go
package B
import (
"fmt"
"go-algorithm/A"
)
func init() {
B1()
}
func B1() {
fmt.Println("b.1(只是iniit)")
}
func B2() {
fmt.Println("b.2")
A.A2()
}
main.go
package main
import "go-algorithm/B"
func main() {
B.B2()
}
结果输出
a.1(只是init)
b.1(只是iniit)
b.2
a.2
总结
- 代码执行,先执行所有的
init()
,init的执行规则是最后引用的先执行,就像栈一样 - 最后是普通代码的执行顺序