go語言的init函數


go語言中init函數用於包(package)的初始化,該函數是go語言的一個重要特性,

有下面的特征:

  • 1 init函數是用於程序執行前做包的初始化的函數,比如初始化包里的變量等
  • 2 每個包可以擁有多個init函數
  • 3 包的每個源文件也可以擁有多個init函數
  • 4 同一個包中多個init函數的執行順序go語言沒有明確的定義  (應該是順序執行)
  • 5 不同包的init函數按照包導入的依賴關系決定該初始化函數的執行順序
  • 6 init函數不能被其他函數調用,而是在main函數執行之前,自動被調用

下面演示一個文件中可以有多個init函數,執行順序是從上往下執行。  

aaa.go

package core
import "fmt"
func init() {
	fmt.Println("core aaa init")
}
func init() {
	fmt.Println("core aaa init2")
}
func Show() {
	fmt.Println("core show")
}

 

下面是core包中的另一個文件也是有init函數。

bbb.go

package core

import "fmt"

func init() {
	fmt.Println("core bbb init")
}

執行main方法的時候會輸出三行:

  

core aaa init
core aaa init2
core bbb init

  

一般來說,如果只需要一個包的  init函數,不需要這個包另外的方法,可以這么寫,這樣就表示只執行這個包的 init函數。

_ "github.com/goinaction/code/chapter3/dbdriver/postgres"

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM