gpt4 book ai didi

go - Goroutine概念:使用函数字面量的直接调用与调用

转载 作者:行者123 更新时间:2023-12-01 22:38:13 25 4
gpt4 key购买 nike

以下两个代码之间的基本区别是什么?不知何故,在第二个示例中,从未调用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()的返回值,这意味着在启动新的goroutine之前先调用demo_process1()并等待。只有在返回时,新的goroutine才能启动并调用demo_process2()(在“原始” goroutine上)。

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

关于go - Goroutine概念:使用函数字面量的直接调用与调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59391974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com