亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Goroutine 概念:直接調用 vs 使用函數字面量調用

Goroutine 概念:直接調用 vs 使用函數字面量調用

Go
MM們 2023-08-14 16:19:57
下面兩個代碼之間的基本區別是什么?不知何故,在第二個示例中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())。


查看完整回答
反對 回復 2023-08-14
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號