Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

3个月前关闭。



Improve this question




我对Golang还是比较陌生,我正努力将自己的头围在goroutine的语义上。
之间有什么区别:
func someFunc() {
    for {
        //some code handled by a persistent connection
    }
}

go someFunc()
func someFunc() {
    go func() {
        for {
            //some code handled by a persistent connection
        }
    }()
}

最佳答案

这是您要交流的问题。通常,函数应表示与该行为的操作模式无关的行为。如果某天您的代码由于某些业务问题而变得全部异步,则不需要触摸someFunc内部的任何代码。
因此,与前者相比,我更喜欢前者,但是最终两者都产生了goroutine并在该线程上执行代码。前者的优点是可以同步运行someFunc

也有其他小的差异。 someFunc的第一个定义一直运行到完成其行为为止。假设在someFunc期间使用了长时间运行的expensiveAction,这样定义变为:

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并安排其执行时间,然后立即退出。这可能会使性能测试更加困难,甚至会产生细微的计时错误。

关于go - 用goroutine调用函数与将函数代码包装在goroutine之间有区别吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62736183/

10-16 07:03