为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信