Go入門18:main函數(shù)和init函數(shù)

Go里面有兩個保留的函數(shù):init函數(shù)(能夠應(yīng)用于所有的package)和main函數(shù)(只能應(yīng)用于package main)。這兩個函數(shù)在定義時不能有任何的參數(shù)和返回值。

雖然一個package里面可以寫任意多個init函數(shù),但這無論是對于可讀性還是以后的可維護(hù)性來說,我們都強烈建議用戶在一個package中每個文件只寫一個init函數(shù)。

Go程序會自動調(diào)用init()和main(),所以你不需要在任何地方調(diào)用這兩個函數(shù)。每個package中的init函數(shù)都是可選的,但package main就必須包含一個main函數(shù)。

程序的初始化和執(zhí)行都起始于main包。如果main包還導(dǎo)入了其它的包,那么就會在編譯時將它們依次導(dǎo)入。有時一個包會被多個包同時導(dǎo)入,那么它只會被導(dǎo)入一次(例如很多包可能都會用到fmt包,但它只會被導(dǎo)入一次,因為沒有必要導(dǎo)入多次)。當(dāng)一個包被導(dǎo)入時,如果該包還導(dǎo)入了其它的包,那么會先將其它包導(dǎo)入進(jìn)來,然后再對這些包中的包級常量和變量進(jìn)行初始化,接著執(zhí)行init函數(shù)(如果有的話),依次類推。等所有被導(dǎo)入的包都加載完畢了,就會開始對main包中的包級常量和變量進(jìn)行初始化,然后執(zhí)行main包中的init函數(shù)(如果存在的話),最后執(zhí)行main函數(shù)。

下圖詳細(xì)地解釋了整個執(zhí)行過程:

main函數(shù)引入包初始化流程圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 將兩個(或更多)語句放在一行書寫,它們 必須用分號 (’;’) 分隔。一般情況下,你不需要分號。 init函數(shù)和m...
    涵仔睡覺閱讀 3,888評論 0 8
  • Go入門 Go介紹 部落圖鑒之Go:爹好還這么努力? 環(huán)境配置 安裝 下載源碼編譯安裝 下載相應(yīng)平臺的安裝包安裝 ...
    齊天大圣李圣杰閱讀 4,767評論 0 26
  • 示例 包的概念、導(dǎo)入與可見性 包是結(jié)構(gòu)化代碼的一種方式:每個程序都由包(通常簡稱為 pkg)的概念組成,可以使用自...
    若與閱讀 1,507評論 0 7
  • (衍生文請結(jié)合洞喵文第五章下) - 盛夏是一個適合熱戀的季節(jié),鬢角青絲與白皙皮膚滲出的細(xì)密汗珠貼合在一起,顧海藍(lán)看...
    蜂蜜柚子與茶閱讀 5,206評論 1 8
  • 文/李小胖的媽媽 “那哪行呢,那就是砸鍋賣鐵,也要給你治好眼睛?!崩罾项^粗聲粗氣的說完,拿下夾在耳朵上的煙卷,又拿...
    李小胖的媽媽閱讀 663評論 2 19

友情鏈接更多精彩內(nèi)容