Go init函數
阿新 • • 發佈:2019-04-08
檢查 輸出 UNC 引導 多個 表達 工作 計算 變量 init函數會在main函數執行之前進行執行、init用在設置包、初始化變量或者其他要在程序運行前優先完成的引導工作。
如果一個包被多個地方引用,那麽只有在這個包第一次被引用時,才會執行這個包裏邊的init函數,其他地方對包的再次引用,這個包裏邊的init函數不會被執行。
init 函數在包級別被定義,主要用於:
- 初始化那些不能被初始化表達式完成初始化的變量
- 檢查或者修復程序的狀態
- 註冊
- 僅執行一次的計算
- 更多其它場合
main.go中的內容是:
package main import ( "pk1" "pk2" ) func main() { pk1.Pk1Demo() pk2.Pk2Demo() }
pk1目錄中的de1.go
package pk1
import (
"fmt"
)
func Pk1Demo() {
fmt.Println("pk1 demo")
}
func init() {
fmt.Println("init. package is pk1")
}
pk2目錄中的de2.go
package pk2 import ( "fmt" "pk1" ) func Pk2Demo() { fmt.Println("pk2 demo") pk1.Pk1Demo() } func init() { fmt.Println("init. package is pk2") }
執行main函數,輸出信息是:
init. package is pk1
init. package is pk2
pk1 demo
pk2 demo
pk1 demo
pk1包被兩個地方引用,第一次引用是在pk2包中,第二次引用是在main包中。雖然pk1包被引用多次,但從程序的輸出信息可知,pk1包中的init函數只執行了一次。
Go init函數