下面的代码给出了编译错误,说’unexpected go’:
x := go doSomething(arg)
func doSomething(arg int) int{
...
return my_int_value
}
我知道,如果我正常调用函数,即不使用 goroutine 或者我可以使用通道等,我可以获取返回值。
我的问题是为什么不能从 goroutine 中获取这样的返回值。
原文由 Nerve 发布,翻译遵循 CC BY-SA 4.0 许可协议
严格的回答是你 可以 做到。这可能不是一个好主意。这是可以做到这一点的代码:
这将产生一个新的 goroutine,它将计算
doSomething()
然后将结果分配给x
。问题是:你打算如何使用原始 goroutine 中的x
?您可能想确保生成的 goroutine 已完成,这样您就不会出现竞争条件。但如果你想这样做,你需要一种与 goroutine 通信的方法,如果你有办法做到这一点,为什么不直接用它来发送值呢?