Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3个月前关闭。
Improve this question
我对Golang还是比较陌生,我正努力将自己的头围在goroutine的语义上。
之间有什么区别:
想改善这个问题吗?更新问题,以便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