一個(gè)完整的 go 語言可運(yùn)行程序,通常會包含引用的包、變量、init 函數(shù)以及 main 函數(shù)幾個(gè)部分。
包、變量、常量、init 函數(shù)以及 main 函數(shù)初始化順序如下圖所示:
在一個(gè) go 語言程序中,初始化順序規(guī)則如下:
- 引入的包
- 當(dāng)前包中的變量、常量
- 當(dāng)前包的 init 函數(shù)
- main 函數(shù)
初始化順序說明:文章來源:http://www.zghlxwxcb.cn/news/detail-413208.html
- 在 go 源程序中,每一個(gè)被 import 的包,按照在源文件中出現(xiàn)順序初始化。
- 如果當(dāng)前包有多個(gè) init 函數(shù)在不同的源文件中,則按照源文件名以字典序從小到大排序,小的先被執(zhí)行到。準(zhǔn)確來說,應(yīng)是按提交給編譯器的源文件名順序?yàn)闇?zhǔn),只是在提交編譯器之前,go 命令行工具對源文件名按字典序排序了。
- 同一包且同一源文件中的 init 函數(shù),則按其出現(xiàn)在文件中的先后順序依次初始化。
- init 函數(shù)只可以由 go runtine 自己調(diào)用,我們在代碼中不可以顯示調(diào)用,也不可以被引用。
- 包 A 引入包 B,包 B 又引入包 C,則包的初始化順序?yàn)椋?C -> B -> A。
- 引入包,必須避免死循環(huán),如 A 引用 B, B 引用 C,C 引用 A。
- 一個(gè)包被其它多個(gè)包引入,如 A -> B ->C 和 H -> I -> C,C 被其它包引用了 2 次,但是注意包 C 只被初始化一次,被依賴的總是先被初始化。
- main包總是被最后一個(gè)初始化,因?yàn)樗偸且蕾噭e的包。
參考:編程寶庫Go語言教程文章來源地址http://www.zghlxwxcb.cn/news/detail-413208.html
到了這里,關(guān)于go語言包、變量、init初始化順序的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!