InitOrder初始化执行顺序

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

总结

  1. 代码执行,先执行所有的init(),init的执行规则是最后引用的先执行,就像栈一样
  2. 最后是普通代码的执行顺序
原文地址:https://www.cnblogs.com/maomaomaoge/p/14129402.html