使用 goroutine 调用函数和在 goroutine 中包装函数代码之间有区别吗?

我对 Golang 比较陌生,我正试图围绕 goroutines 的语义。有没有区别:


func someFunc() {

    for {

        //some code handled by a persistent connection

    }

}


go someFunc()


func someFunc() {

    go func() {

        for {

            //some code handled by a persistent connection

        }

    }()

}


幕布斯6054654
浏览 118回答 1
1回答

HUWWW

这是您要传达的内容的问题。通常,函数应该表示与该行为的操作模式无关的行为。如果有一天您的代码由于某些业务问题而变得完全异步,则不需要触及someFunc.出于这个原因,我更喜欢前者而不是后者,但最终两者都产生了一个 goroutine 并在该线程上执行代码。前者的优点是可以someFunc同步运行。还有其他一些小的差异。someFunc 的第一个定义一直运行,直到它完成其行为。假设expensiveAction在 someFunc 期间进行了长时间运行,因此定义变为:func someFunc() {    ok := expensiveAction()    if !ok {        panic("Something bad happened")    }}和func someFunc() {    go func() {        ok := expensiveAction()        if !ok {            panic("Something bad happened")        }    }()}的第一个定义someFunc在调用时将运行直到expensiveAction完成。第二个定义将定义匿名函数,启动 goroutine 并安排其执行,然后立即退出。这可能会使性能测试更加困难,甚至会产生细微的时序错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go