下面兩個代碼之間的基本區別是什么?不知何故,在第二個示例中demo_process2()從未被調用,但在第一個示例中它工作正常。1.go func() { Must(demo_process1())}()demo_process2()2.go Must(demo_process1())demo_process2()其中Must():func Must(err error) { if err != nil { panic(err) }}
1 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
規范:Go 語句:
函數值和參數在調用 goroutine 中照常計算,但與常規調用不同,程序執行不會等待調用的函數完成。相反,該函數開始在新的 goroutine 中獨立執行。
在第一個示例中,您啟動一個不帶參數的匿名函數(函數文字)作為新的 goroutine。Must()
并demo_process1()
在其中同時調用demo_process2()
(在“原始”goroutine 中執行)。
然而,在你的第二個例子中:
go?Must(demo_process1()) demo_process2()
作為 goroutine 啟動的函數是,其參數在調用 goroutine 中Must()
計算。的參數是 的返回值,表示在啟動新的 goroutine 之前先被調用并等待。只有當它返回時,新的 goroutine 才能啟動并被調用(在“原始”goroutine 上)。Must()
demo_process1()
demo_process1()
demo_process2()
總而言之,在第二個示例中demo_process1()
和demo_process2()
不是同時運行,而是在同一個 goroutine 中順序運行。只有 會Must()
在新的 goroutine 上執行(與 同時執行demo_process2()
)。
- 1 回答
- 0 關注
- 148 瀏覽
添加回答
舉報
0/150
提交
取消