1. 程式人生 > 實用技巧 >`main`函式和`init`函式

`main`函式和`init`函式

main函式和init函式

Go裡面有兩個保留的函式:init函式(能夠應用於所有的package)和main函式(只能應用於package main)。
這兩個函式在定義時不能有任何的引數和返回值。
雖然一個package裡面可以寫任意多個init函式,但這無論是對於可讀性還是以後的可維護性來說,
我們都強烈建議使用者在一個package中每個檔案只寫一個init函式。

Go程式會自動呼叫init()main(),所以你不需要在任何地方呼叫這兩個函式。
每個package中的init函式都是可選的,但package main就必須包含一個main函式。

程式的初始化和執行都起始於main包。如果main

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

圖2.6 main函式引入包初始化流程圖