Goroutine 概念:直接调用 vs 使用函数字面量调用

下面两个代码之间的基本区别是什么?不知何故,在第二个示例中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)

    }

}


MM们
浏览 108回答 1
1回答

繁星淼淼

规范: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())。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go