Golang--init函數介紹

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章