(1)對(duì)同一個(gè) go 文件的 init( ) 調(diào)用順序是從上到下的
(2)對(duì)同一個(gè) package 中的不同文件泄伪,將文件名按字符串進(jìn)行“從小到大”排序(數(shù)字排在前面),之后順序調(diào)用各文件中的init()函數(shù)
(3)對(duì)于不同的 package耙蔑,如果不相互依賴的話,按照 main 包中 import 的順序調(diào)用其包中的 init() 函數(shù)
(4)如果 package 存在依賴,調(diào)用順序?yàn)樽詈蟊灰蕾嚨淖钕缺怀跏蓟桌牛纾簩?dǎo)入順序 main –> A –> B –> C疾捍,則初始化順序?yàn)?C –> B –> A –> main奈辰,一次執(zhí)行對(duì)應(yīng)的 init 方法。
first.go
package multiple_init_funcs
import "fmt"
func init() {
fmt.Println("first init in multiple_init_funcs/first.go")
}
func init() {
fmt.Println("second init in multiple_init_funcs/first.go")
}
second.go
package multiple_init_funcs
import "fmt"
func init() {
fmt.Println("first init in multiple_init_funcs/second.go")
}
func init() {
fmt.Println("second init in multiple_init_funcs/second.go")
}
func Hello() {
fmt.Println("Hello")
}
main_test.go
package multiple_init_funcs
import (
"fmt"
"testing"
)
func TestMultipleInitFunctions(t *testing.T) {
fmt.Println("in main_test.go")
t.Logf("pass")
/*
輸出結(jié)果:
first init in multiple_init_funcs/first.go
second init in multiple_init_funcs/first.go
first init in multiple_init_funcs/second.go
second init in multiple_init_funcs/second.go
*/
}