为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
幕布斯6054654 2022-06-13 16:32:50
我对 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        }    }()}
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

这是您要传达的内容的问题。通常,函数应该表示与该行为的操作模式无关的行为。如果有一天您的代码由于某些业务问题而变得完全异步,则不需要触及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 并安排其执行,然后立即退出。这可能会使性能测试更加困难,甚至会产生细微的时序错误。


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号