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