回答

收藏

从 goroutine 中获取返回值

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

以下代码给出了编译错误,提示意外操作:% D$ A0 Y2 H7 s9 p: w
    x := go doSomething(arg)func doSomething(arg int) int{    ...    return my_int_value}1 n* n( ~+ O1 }: S. @
我知道,如果我正常调用函数,即不使用 goroutine 或者我可以使用通道等,我可以获得返回值。
& z6 z+ w  n! s* l$ o# j9 {我的问题是为什么不可能从 goroutine 获得这样的返回值。$ g  u9 m9 A. D# t2 Z6 y
                                                               
. L( v% H. v: ~    解决方案:                                                                8 B! t$ u8 T- ~- [. `
                                                                严格的答案是你可以这可能不是一个好主意。这是一个可以做到这一点的代码:6 \* y; F+ G3 P4 q' T6 N# I# ?0 ?) m
[code]var x intgo func()      x = doSomething()code]这将产生新的 goroutine,它将计算doSomething()并分配结果x.问题是:你将如何使用它x原始 goroutine?你可能想确保生成 goroutine 已经完成了,所以你不会有竞争条件。但如果你想这样做,你需要一种和 goroutine 如果你有办法做到这一点,为什么不直接用它来发送值呢?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则