从goroutine捕获返回值
以下代码给出了编译错误,提示“意外运行”:
x := go doSomething(arg)func doSomething(arg int) int{
...
return my_int_value
}
我知道,如果正常调用函数就可以获取返回值,而无需使用goroutine。或者我可以使用频道等
我的问题是为什么不能从goroutine中获取像这样的返回值。
回答:
严格的答案是您 可以 做到。这可能不是一个好主意。下面的代码可以做到这一点:
var x intgo func() {
x = doSomething()
}()
这将产生一个新的goroutine,它将进行计算doSomething()
,然后将结果分配给x
。问题是:您将如何使用x
原始goroutine?您可能要确保使用它完成了生成的goroutine,以便您没有竞争条件。但是,如果要执行此操作,则需要一种与goroutine进行通信的方法,并且如果可以执行此操作,为什么不仅仅使用它来将值发送回去呢?
以上是 从goroutine捕获返回值 的全部内容, 来源链接: utcz.com/qa/427547.html