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函数只执行了一次。变量