以下代码给出了编译错误,提示“意外运行”:
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进行通信的方法,并且如果可以执行此操作,为什么不仅仅使用它来将值发送回去呢?
doSomething()
x