(轉)go中的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函數。下圖詳細地解釋了整個執行過程:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章