golang init函式
go語言中init函式用於包(package)的初始化,該函式是go語言的一個重要特性,
有下面的特徵:
1 init函式是用於程式執行前做包的初始化的函式,比如初始化包裡的變數等 2 每個包可以擁有多個init函式 3 包的每個原始檔也可以擁有多個init函式 4 同一個包中多個init函式的執行順序go語言沒有明確的定義(說明) 5 不同包的init函式按照包匯入的依賴關係決定該初始化函式的執行順序 6 init函式不能被其他函式呼叫,而是在main函式執行之前,自動被呼叫
下面的兩個go檔案演示了:
1 一個package或者是go檔案可以包含多個init函式, 2 init函式是在main函式之前執行的, 3 init函式被自動呼叫,不能在其他函式中呼叫,顯式呼叫會報該函式未定義
gprog.go程式碼
package main import ( "fmt" ) // the other init function in this go source file func init() { fmt.Println("do in init") } func main() { fmt.Println("do in main") } func testf() { fmt.Println("do in testf") //if uncomment the next statment, then go build give error message : .\gprog.go:19: undefined: init //init() }
ginit1.go程式碼,注意這個原始檔中有兩個init函式
package main import ( "fmt" ) // the first init function in this go source file func init() { fmt.Println("do in init1") } // the second init function in this go source file func init() { fmt.Println("do in init2") }
編譯上面兩個檔案:go build gprog.go ginit1.go
編譯之後執行gprog.exe後的結果表明,gprog.go中的init函式先執行,然後執行了ginit1.go中的兩個init函式,然後才執行main函式。
執行結果:
do in init do in init1 do in init2 do in main