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

相關文章
相關標籤/搜索