Goroutine概念:直接调用与使用函数文本的调用

Goroutine概念:直接调用与使用函数文本的调用,go,concurrency,goroutine,Go,Concurrency,Goroutine,以下两种代码的基本区别是什么?不知何故,在第二个示例中,从未调用过demo\u process2(),但在第一个示例中它运行良好 1. go func(){ 必须(demo_process1()) }() 演示程序2() 2. go-Must(demo_-process1()) 演示程序2() 其中必须(): func必须(错误){ 如果错误!=零{ 恐慌(错误) } } 函数值和参数在调用goroutine中,但与常规调用不同,程序执行不会等待调用的函数完成。相反,函数开始在新的goro

以下两种代码的基本区别是什么?不知何故,在第二个示例中,从未调用过
demo\u process2()
,但在第一个示例中它运行良好

1.
go func(){
必须(demo_process1())
}()
演示程序2()
2.
go-Must(demo_-process1())
演示程序2()
其中
必须()

func必须(错误){
如果错误!=零{
恐慌(错误)
}
}

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

在第一个示例中,您启动了一个匿名函数(函数文本),该函数没有参数,作为一个新的goroutine
Must()
demo\u process1()
demo\u process2()
(在“原始”goroutine中执行)同时在其中调用

但是,在第二个示例中:

go Must(demo_process1())
demo_process2()
作为goroutine启动的函数是
Must()
,其参数在调用goroutine
中进行计算。
Must()
的参数是
demo\u process1()
的返回值,这意味着在启动新的goroutine之前先调用并等待
demo\u process1()
。只有当它返回时,才能启动新的goroutine并调用
demo\u process2()
(在“原始”goroutine上)


总而言之,在第二个示例中,
demo\u process1()
demo\u process2()
不是在同一个goroutine中同时运行,而是顺序运行。只有
Must()
在新的goroutine上执行(与
demo\u process2()
同时执行)。

请显示更多输出并提供一个可复制的示例。请参阅: