init()函式會在每個包完成初始化後自動執行,並且執行優先順序比main函式高。init 函式通常被用來:
為了使用匯入的包,首先必須將其初始化。初始化總是以單執行緒執行,並且按照包的依賴關係順序執行。這通過golang的執行時系統控制,如下圖所示:
初始化匯入的包(遞迴匯入)
對包塊中宣告的變數進行計算和分配初始值
執行包中的init函式
執行結果
functions()
--->
init function
--->
main
--->
即使包被匯入多次,初始化只需要一次。init函式不需要傳入引數,也不會返回任何值。與main相比而言,init沒有被宣告,因此也不能被引用。
package main
import
"fmt"
func init()
func main()
在編譯上面的函式時,會出錯「undefined:init」。
每個原始檔中可以包含多個init函式,記得《the way to go》中寫的是每個原始檔只能包含乙個init函式,這有點出入,所以下面驗證下。
package main
import
"fmt"
func init()
func init()
func main()
/*執行結果:
init1
init2
main */
從上面的例子中,可以看出每個原始檔可以包含多個init函式。
init函式常用的乙個例子就是用來設定初始表示式的值。
var precomputed=[20]float64{}
func init()
}
因為上面**中不可能用for迴圈來作為precomputed的值(這是一句宣告),因此可以用init函式來解決這個問題。
go要求非常嚴格,不允許引用不使用的包。但是有時你引用包只是為了呼叫init函式去做一些初始化工作。此時空識別符號(也就是下劃線)的作用就是為了解決這個問題。
import _ "image/png"
go init函式和 main函式
init函式 go語言中 init 函式用於包 package的初始化,該函式是go語言的乙個重要特徵 有以下的特徵 1 init函式是用於程式執行錢做包的初始化的函式,比如初始化包裡的變數等 2 每個包可以擁有多個init函式 3 包的每個原始檔也可以擁有多個init函式 4 同乙個包中多個ini...
go init函式 Go語言設計模式 單例
單體設計模式是一種建立型的設計模式,也是最常用的設計模式之一。只允許結構體的乙個例項存在時才使用此模式。這個唯一例項稱為單例物件。單例物件適用的情況有 單例例項是在結構體首次初始化時建立的。通常,為只需要建立乙個例項的結構體定義getinstance方法。一旦建立之後,getinstance每次都返...
go init函式 面試錄 Go語言篇 記憶體模型
問 了解過go的記憶體模型嗎?大概講一講 答 go記憶體模型指定了一系列條件,在這些條件下,可以保證在乙個goroutine中讀取變數可以觀察到其他goroutine中對同一變數所寫的值。即安全的在不同的協程中讀寫變數。問 為什麼需要有這些條件呢?答 編譯器或處理器不保證指令執行順序和程式書寫順序一...