回答

收藏

从 goroutine 中获取返回值

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

以下代码给出了编译错误,提示意外操作:8 b3 A0 z5 D- ]) S6 J" Y5 A
    x := go doSomething(arg)func doSomething(arg int) int{    ...    return my_int_value}
    $ x: l/ [: P# d/ Z4 M# I
我知道,如果我正常调用函数,即不使用 goroutine 或者我可以使用通道等,我可以获得返回值。
6 G5 Y" I) H3 G( {我的问题是为什么不可能从 goroutine 获得这样的返回值。
( B  S# d$ B& a% U                                                               
: ^4 G, o% l& k& w    解决方案:                                                               
, L% {$ ~1 V0 ^  W5 B3 A1 T) g                                                                严格的答案是你可以这可能不是一个好主意。这是一个可以做到这一点的代码:+ g/ t7 x4 w. @8 \
[code]var x intgo func()      x = doSomething()code]这将产生新的 goroutine,它将计算doSomething()并分配结果x.问题是:你将如何使用它x原始 goroutine?你可能想确保生成 goroutine 已经完成了,所以你不会有竞争条件。但如果你想这样做,你需要一种和 goroutine 如果你有办法做到这一点,为什么不直接用它来发送值呢?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则