Golang 程式執行順序

2022-03-16 04:58:08 字數 793 閱讀 6206

在乙個 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而準備的乙個巨集。...