在乙個 go 程式中通常包含:包、常量、變數、init()、main()等元素,如果同時存在多個包,包之間存在依賴關係,每個包中存在多個 init 函式,每個檔案中存在多個 init 函式,那麼問題來了,他們之間的執行順序是什麼樣的?通過本文我們來對它們之間的執行順序做盡可能詳盡的說明。如有不正之處,歡迎批評指正。
go 程式的初始化順序見下圖:
init()、main() 是 go 語言中的保留函式,兩個函式在 go 語言中的區別如下:
相同點:
不同點:
兩個函式的執行順序:
在同乙個檔案中,常量、變數、init()、main() 依次進行初始化。
1、在同乙個 package 中,可以多個檔案中定義 init 方法
2、在同乙個 go 檔案中,可以重複定義 init 方法
3、在同乙個 package 中,不同檔案中的 init 方法的執行按照檔名先後執行各個檔案中的 init 方法
4、在同乙個檔案中的多個 init 方法,按照在**中編寫的順序依次執行不同的 init 方法
5、對於不同的 package,如果不相互依賴的話,按照 main 包中 import 的順序呼叫其包中的 init() 函式
6、如果 package 存在依賴,呼叫順序為最後被依賴的最先被初始化,例如:匯入順序 main –> a –> b –> c,則初始化順序為 c –> b –> a –> main,一次執行對應的 init 方法。
所有 init 函式都在同⼀個 goroutine 內執⾏。
所有 init 函式結束後才會執⾏ main.main 函式。
程式執行順序
public class testa 類b public class testb 類 parent public class parent private testa testa2 newtesta parent變數 public parent parent的子類subclass public cl...
MFC程式執行順序
2 winmain登場 extern c int winapi twinmain hinstance hinstance,hinstance hprevinstance,lptstr lpcmdline,int ncmdshow twinmain函式的 t 是為了支援unicode而準備的乙個巨集。...
MFC程式執行順序
2 winmain登場 extern c int winapi twinmain hinstance hinstance,hinstance hprevinstance,lptstr lpcmdline,int ncmdshow twinmain函式的 t 是為了支援unicode而準備的乙個巨集。...