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

GO - for 循环中的子程序行为

GO - for 循环中的子程序行为

Go
DIEA 2021-07-30 09:07:41
我对我对 for 循环中 go 子例程的行为的理解有些怀疑。据我了解,当我们有一个 for 循环时:for key := range Map {   go subroutine(Map[key])}Map 有,比方说 3 (key,Value) 对。所以我的理解是subroutine()函数将使用所有Map[Key]值同时运行,即 subroutine(Map[ key1 ])、subroutine(Map[ key2 ]) 和 subroutine(Map[ key3 ]) 都将同时运行?我对 for 循环中并发子例程的理解是否正确?
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

是的。请记住,在程序结束之前,您仍然需要主 goroutine 活着才能完成这些。你可以使用类似 sync.WaitGroup 的东西:


wg := new(sync.WaitGroup)

for key := range Map {

  wg.Add(1)

  go func() {

    subroutine(Map[key])

    wg.Done()

  }

}

wg.Wait()

或者,如果您在主例程中进行诸如服务器循环之类的事情,您可能根本不需要它,因为在向外部发送相关信号之前,您的程序不会完成。


查看完整回答
反对 回复 2021-08-02
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信