戈鲁丁创作设计模式

在编写应作为 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

}


饮歌长啸
浏览 96回答 1
1回答

牧羊人nacy

在Go中,将函数作为goroutine(使用go关键字/语句)启动是微不足道的,因此无论调用方是否要同步或异步运行函数,请始终将该选项留给调用方。通过这种方式,您也可以通过异步交付结果来重温自己,客户端可能已经为此指定了一个通道,该通道“集成”到等待结果处理的其他goroutine中。类似地,客户端可能已经启动了goroutine准备其他事情,因此如果您“连接”它,客户端可以使用该goroutine而无需启动另一个goroutine。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java