Goroutine 创建设计模式

当编写应该作为 goroutine 的一部分运行的逻辑时,方法本身应该创建 goroutine 还是应该由调用函数负责?例如,以下哪个更可取?


在方法中创建 go 例程


func longrunning() chan Result {

    c := make(chan Result)

    go func() {

        // Business Logic Here

        c <- Result{}

    }()

    return c

}


func main() {

    c := longrunning()

    

    // Do additional tasks

    

    <-c

}

留给调用者


func longrunning() Result {

    // Business Logic Here

    return Result{}

}


func main() {

    c := make(chan Result)


    go func() {

        c <- longrunning()

    }()

    

    // Do additional tasks


    <-c

}


哆啦的时光机
浏览 138回答 1
1回答

ABOUTYOU

在 Go 中,将函数作为 goroutine 启动(使用go关键字 / 语句)是微不足道的,所以无论他/她想要同步还是异步运行你的函数,始终将该选项留给调用者。这样你也可以从异步传递结果中解脱出来,客户端可能已经有一个指定的通道,“集成”到其他等待结果处理的 goroutines 中。类似地,客户端可能已经启动了一个 goroutine 来准备其他事情,因此客户端可以使用该 goroutine 而无需启动另一个 goroutine,如果您将其“连接”进去。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go