init函數會在main函數執行以前進行執行、init用在設置包、初始化變量或者其餘要在程序運行前優先完成的引導工做。ide
若是一個包被多個地方引用,那麼只有在這個包第一次被引用時,纔會執行這個包裏邊的init函數,其餘地方對包的再次引用,這個包裏邊的init函數不會被執行。
init 函數在包級別被定義,主要用於:函數
main.go中的內容是:code
package main import ( "pk1" "pk2" ) func main() { pk1.Pk1Demo() pk2.Pk2Demo() }
pk1目錄中的de1.goit
package pk1 import ( "fmt" ) func Pk1Demo() { fmt.Println("pk1 demo") } func init() { fmt.Println("init. package is pk1") }
pk2目錄中的de2.goclass
package pk2 import ( "fmt" "pk1" ) func Pk2Demo() { fmt.Println("pk2 demo") pk1.Pk1Demo() } func init() { fmt.Println("init. package is pk2") }
執行main函數,輸出信息是:import
init. package is pk1 init. package is pk2 pk1 demo pk2 demo pk1 demo
pk1包被兩個地方引用,第一次引用是在pk2包中,第二次引用是在main包中。雖然pk1包被引用屢次,但從程序的輸出信息可知,pk1包中的init函數只執行了一次。變量