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