回答

收藏

从 goroutine 中获取返回值

技术问答 技术问答 367 人阅读 | 0 人回复 | 2023-09-12

以下代码给出了编译错误,提示意外操作:
* J, n. v! l  S3 y5 Q) O# @- g
    x := go doSomething(arg)func doSomething(arg int) int{    ...    return my_int_value}
    ) x* e' O% V3 v
我知道,如果我正常调用函数,即不使用 goroutine 或者我可以使用通道等,我可以获得返回值。
( l# S+ o* ]9 L2 J我的问题是为什么不可能从 goroutine 获得这样的返回值。
1 P$ ]2 M( m- F( p9 }                                                               
! Y0 f& u) F2 W$ j" s& ]; d9 n    解决方案:                                                                & `0 x6 R! `' g% U( h* \" Z. h
                                                                严格的答案是你可以这可能不是一个好主意。这是一个可以做到这一点的代码:6 `4 ]5 ?- }/ ]& ~. z' q  M
[code]var x intgo func()      x = doSomething()code]这将产生新的 goroutine,它将计算doSomething()并分配结果x.问题是:你将如何使用它x原始 goroutine?你可能想确保生成 goroutine 已经完成了,所以你不会有竞争条件。但如果你想这样做,你需要一种和 goroutine 如果你有办法做到这一点,为什么不直接用它来发送值呢?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则