登录
首页 >  Golang >  Go问答

不同调用方式的 Goroutine 理解:直接调用 vs 函数字面量调用

来源:stackoverflow

时间:2024-03-01 08:57:25 329浏览 收藏

本篇文章向大家介绍《不同调用方式的 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)
    }
}

解决方案


Spec: Go statements:

调用 goroutine 中的函数值和参数为 evaluated as usual,但与常规调用不同,程序执行不会等待调用的函数完成。相反,该函数开始在新的 goroutine 中独立执行。

在第一个示例中,您启动了一个不带参数的匿名函数(函数文字)作为新的 goroutine。 must()demo_process1() 在其中被调用,同时demo_process2() (在“原始”goroutine 中执行)。

但是在你的第二个例子中:

go Must(demo_process1())
demo_process2()

作为 goroutine 启动的函数是 must(),其参数在调用 goroutine 中进行评估。 must() 的参数是 demo_process1() 的返回值,这意味着 demo_process1() 在启动新的 goroutine 之前首先被调用并等待。只有当它返回时,新的 goroutine 才会被启动,并且 demo_process2() 才会被调用(在“原始”goroutine 上)。

总而言之,在第二个示例中,demo_process1()demo_process2() 不是同时运行,而是在同一个 goroutine 中顺序运行。只有 must() 在新的 goroutine 上执行(与 demo_process2() 同时执行)。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《不同调用方式的 Goroutine 理解:直接调用 vs 函数字面量调用》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>