下面两个代码之间的基本区别是什么?不知何故,在第二个示例中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 关注
- 107 浏览
添加回答
举报
0/150
提交
取消