从goroutine捕获返回值

以下代码给出了编译错误,提示“意外运行”:

x := go doSomething(arg)

func doSomething(arg int) int{

...

return my_int_value

}

我知道,如果正常调用函数就可以获取返回值,而无需使用goroutine。或者我可以使用频道等

我的问题是为什么不能从goroutine中获取像这样的返回值。

回答:

严格的答案是您 可以 做到。这可能不是一个好主意。下面的代码可以做到这一点:

var x int

go func() {

x = doSomething()

}()

这将产生一个新的goroutine,它将进行计算doSomething(),然后将结果分配给x。问题是:您将如何使用x原始goroutine?您可能要确保使用它完成了生成的goroutine,以便您没有竞争条件。但是,如果要执行此操作,则需要一种与goroutine进行通信的方法,并且如果可以执行此操作,为什么不仅仅使用它来将值发送回去呢?

以上是 从goroutine捕获返回值 的全部内容, 来源链接: utcz.com/qa/427547.html

回到顶部