golangmainmaingolanginitmaininit
目录结构:
├── a │ └── a.go ├── b │ └── b.go └── main.go
main.go
package main import ( "fmt" "./b" "./a" ) func init() { fmt.Println("main init 1") } func init() { fmt.Println("main init 2") } func main() { fmt.Println("main") a.Add() b.Add() }
a.go
package a import "fmt" func init() { fmt.Println("a init") } func Add() { fmt.Println("a Add") }
b.go
package b import "fmt" func init(){ fmt.Println("b init") } func Add(){ fmt.Println("b Add") }
输出结果:
:point_right: [gotest] go run main.go b init a init main init 1 main init 2 main a Add b Add
结论:
可以看出执行顺序是按照导入包的顺序执行,而不是按照调用先后顺序执行。
init
init
initmaininitinitinitinitgolanginit