1. 程式人生 > >Go init函數

Go init函數

檢查 輸出 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函數