我对 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 并安排其执行,然后立即退出。这可能会使性能测试更加困难,甚至会产生细微的时序错误。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消