您好,登錄后才能下訂單哦!
本篇文章為大家展示了Go語(yǔ)言中init函數(shù)的作用是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
Go語(yǔ)言有一個(gè)特殊的函數(shù)init,先于main函數(shù)執(zhí)行,實(shí)現(xiàn)包級(jí)別的一些初始化操作。
對(duì)于init 函數(shù)來說:每個(gè)包可以包含任意多個(gè) init 函數(shù),這些函數(shù)都會(huì)在程序執(zhí)行開始的時(shí)候被調(diào)用。所有被編譯器發(fā)現(xiàn)的 init 函數(shù)都會(huì)安排在 main 函數(shù)之前執(zhí)行。init 函數(shù)用在設(shè)置包、初始化變量或其他要在程序運(yùn)行前優(yōu)先完成的引導(dǎo)工作。
init函數(shù)的主要作用:1)初始化不能采用初始化表達(dá)式初始化的變量。2)程序運(yùn)行前的注冊(cè)。3)實(shí)現(xiàn)sync.Once功能。(備注:init函數(shù)沒有輸入?yún)?shù)、返回值。)
在Go語(yǔ)言中,執(zhí)行順序?yàn)椋撼跏蓟兞?-》init函數(shù)--》main函數(shù)
結(jié)果分析:通過輸出結(jié)果,我們可以看到,Go語(yǔ)言的程序,在開始運(yùn)行之前,首先執(zhí)行的是變量初始化操作,然后是init()函數(shù),最后是main()函數(shù)。
Go語(yǔ)言中,一個(gè)包文件和一個(gè).go文件中可以實(shí)現(xiàn)多個(gè)init()函數(shù),也不會(huì)編譯出錯(cuò)。
結(jié)果分析:通過輸出結(jié)果,我們能夠看出同一個(gè)包中的init函數(shù)是可以實(shí)現(xiàn)多個(gè)的,理論上他們的執(zhí)行順序可以不同,但是筆者執(zhí)行了5次都是上面的結(jié)果,不知道是不是編譯順序的原因。
如題,如下圖所示:
(轉(zhuǎn)載:https://blog.csdn.net/benben_2015/article/details/79486077)
例子如下所示:
結(jié)果分析:包的依賴關(guān)系 main->b->a, 所以輸出結(jié)果的init函數(shù)執(zhí)行順序是,先執(zhí)行a中的,再執(zhí)行b中的,最后執(zhí)行c中的。
Go要求非常嚴(yán)格,不允許引用不使用的包,不過我們可以采用下面的格式(import _ pkg)來引用,只是用它來執(zhí)行對(duì)應(yīng)包的init函數(shù)。
將上面c.go中的import "./b" 替換成import _ "./b", 并將main()中的b.B()刪除,執(zhí)行結(jié)果如下所示。
上述內(nèi)容就是Go語(yǔ)言中init函數(shù)的作用是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。