init函數
每個golang源文件中都可以定義一個init函數。golang系統中,所有的源文件都有自己所屬的目錄,每一個目錄都有對應的包名。在包的引用中,一旦某一個包被使用,則這個包下邊的init函數將會被執行,且只執行一次。只執行一次的含義是什麼呢?
如果一個包被多個地方引用,那麼只有在這個包第一次被引用時,纔會執行這個包裏邊的init函數,其他地方對包的再次引用,這個包裏邊的init函數不會被執行。
下邊來定義一個工程,GOPATH所在目錄結構信息是:
src
---pk1
------de1.go
---pk2
------de2.go
---main.go
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