当编写应该作为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
}发布于 2020-12-27 12:56:48
在Go中,将函数作为goroutine (使用go关键字/语句)启动非常简单,因此无论调用者是希望同步还是异步运行您的函数,始终将该选项留给调用方。
通过这种方式,您还可以重新体验异步交付结果的过程,客户端可能已经有了一个指定的通道,“集成”到其他等待结果处理的峡谷中。类似地,客户端可能已经有一个已启动的goroutine正在准备其他东西,因此客户机可以使用该goroutine,而不必启动另一个,如果您“连接”了它。
https://stackoverflow.com/questions/65465897
复制相似问题