1. 程式人生 > >Go語言中的init函式

Go語言中的init函式

今天來了解一下Go語言中的init函式

Go語言中有兩個保留的函式:main函式和init函式

init函式的特性如下:

init函式沒有引數和返回值;
init函式不能被其他函式呼叫,只能被Go程式自動呼叫;
一個package中可以包含多個init函式;
一個go檔案中可以包含多個init函式;
最好一個go檔案中只寫一個init函式;

init函式與main函式的區別:

init可以應用於任意包中,且可以重複定義多個;
main函式只能用於main包中,且只能定義一個。

init函式和main函式的執行順序,導包的順序,常量、變數的初始化順序:

程式的初始化和執行都起始於main包。如果main包還匯入了其它的包,那麼就會在編譯時將它們依次匯入。有時一個包會被多個包同時匯入,那麼它只會被匯入一次(例如很多包可能都會用到fmt包,但它只會被匯入一次,因為沒有必要匯入多次)。當一個包被匯入時,如果該包還匯入了其它的包,那麼會先將其它包匯入進來,然後再對這些包中的包級常量和變數進行初始化,接著執行init函式(如果有的話),依此類推。等所有被匯入的包都載入完畢了,就會開始對main包中的包級常量和變數進行初始化,然後執行main包中的init函式(如果存在的話),最後執行main函式。過程如下:在這裡插入圖片描述

init函式的常見作用:

初始化不能採用初始化表示式初始化的變數;
檢查/修復程式的狀態;
程式執行前的註冊;
執行一次計算;
實現sync.Once功能。

參考文章:

go中的main函式和init函式
Golang init函式
Go init函式詳解
五分鐘理解golang的init函式
Go 中的 init 函式