go init 函數(shù)

go語(yǔ)言中init函數(shù)用于包(package)的初始化,該函數(shù)是go語(yǔ)言的一個(gè)重要特性哼丈,有下面的特征:

1 init函數(shù)是用于程序執(zhí)行前做包的初始化的函數(shù)臣樱,比如初始化包里的變量等
2 每個(gè)包可以擁有多個(gè)init函數(shù)
3 包的每個(gè)源文件也可以擁有多個(gè)init函數(shù)
4 同一個(gè)包中多個(gè)init函數(shù)的執(zhí)行順序go語(yǔ)言沒(méi)有明確的定義
5 不同包的init函數(shù)按照包導(dǎo)入的依賴(lài)關(guān)系決定該初始化函數(shù)的執(zhí)行順序
6 init函數(shù)不能被其他函數(shù)調(diào)用,而是在main函數(shù)執(zhí)行之前再膳,自動(dòng)被調(diào)用

包的初始化

為了使用導(dǎo)入的包挺勿,首先必須將其初始化。初始化總是以單線(xiàn)程執(zhí)行喂柒,并且按照包的依賴(lài)關(guān)系順序執(zhí)行不瓶。這通過(guò)Golang的運(yùn)行時(shí)系統(tǒng)控制,如下圖所示:

  1. 初始化導(dǎo)入的包(遞歸導(dǎo)入)
  2. 對(duì)包塊中聲明的變量進(jìn)行計(jì)算和分配初始值
  3. 執(zhí)行包中的init函數(shù)


    image.png

下面二個(gè)文件進(jìn)行演示:
main.go

package main

import (
   "fmt"
)

var _ int64 = cc()

func init() {
   fmt.Println("main.init1")
}
func init() {
   fmt.Println("main. init2")
}

func cc() int64 {
   fmt.Println("calling cc() in main.go")
   return 1
}
func main() {

   fmt.Println("main.ing")
}

ap.go

package main

import "fmt"

func init() {
   fmt.Println("ap.init1")
}
func init() {
   fmt.Println("ap.init2")
}

執(zhí)行 go build ap.go main.go胳喷,編譯之后執(zhí)行./main:

calling cc() in main.go
main.init1
main. init2
ap.init1
ap.init2
main.ing

可以得出的是:

1 一個(gè)package或者是go文件可以包含多個(gè)init函數(shù)湃番,

 2 init函數(shù)是在main函數(shù)之前執(zhí)行的,

 3 init函數(shù)被自動(dòng)調(diào)用吭露,不能在其他函數(shù)中調(diào)用吠撮,顯式調(diào)用會(huì)報(bào)該函數(shù)未定義

執(zhí)行順序:解析變量 > init 函數(shù) > main 函數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讲竿,隨后出現(xiàn)的幾起案子泥兰,更是在濱河造成了極大的恐慌,老刑警劉巖题禀,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋诗,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡迈嘹,警方通過(guò)查閱死者的電腦和手機(jī)削彬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秀仲,“玉大人融痛,你說(shuō)我怎么就攤上這事∩窠” “怎么了雁刷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)保礼。 經(jīng)常有香客問(wèn)我沛励,道長(zhǎng),這世上最難降的妖魔是什么炮障? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任目派,我火速辦了婚禮,結(jié)果婚禮上胁赢,老公的妹妹穿的比我還像新娘企蹭。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布练对。 她就那樣靜靜地躺著遍蟋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪螟凭。 梳的紋絲不亂的頭發(fā)上虚青,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音螺男,去河邊找鬼棒厘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛下隧,可吹牛的內(nèi)容都是我干的奢人。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼淆院,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼何乎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起土辩,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤支救,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拷淘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體各墨,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年启涯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贬堵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡结洼,死狀恐怖黎做,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情补君,我是刑警寧澤引几,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布昧互,位于F島的核電站挽铁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏敞掘。R本人自食惡果不足惜叽掘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玖雁。 院中可真熱鬧更扁,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至膛薛,卻和暖如春听隐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哄啄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工雅任, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咨跌。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓沪么,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锌半。 傳聞我的和親對(duì)象是個(gè)殘疾皇子禽车,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 每一個(gè)源文件都可以包含一個(gè)int函數(shù),該函數(shù)會(huì)在main函數(shù)執(zhí)行前刊殉,被Go運(yùn)行框架調(diào)用哭当,也就是說(shuō)init會(huì)在mai...
    StevenQin閱讀 1,637評(píng)論 0 0
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章冗澈,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,768評(píng)論 2 9
  • 示例 包的概念钦勘、導(dǎo)入與可見(jiàn)性 包是結(jié)構(gòu)化代碼的一種方式:每個(gè)程序都由包(通常簡(jiǎn)稱(chēng)為 pkg)的概念組成,可以使用自...
    若與閱讀 1,444評(píng)論 0 7
  • 申金鑫 17101223365 轉(zhuǎn)載自知乎專(zhuān)欄 Go語(yǔ)言實(shí)戰(zhàn)筆記 【嵌牛導(dǎo)讀】:本教程詳細(xì)介紹了Go語(yǔ)言的一些包的...
    Felixxin閱讀 486評(píng)論 0 1
  • 實(shí)習(xí)生涯開(kāi)始了亚亲,無(wú)薪資彻采,加油!現(xiàn)實(shí)骨感捌归!
    有期待閱讀 87評(píng)論 0 0