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

时间:2014-03-04 19:54:30

标签: for-loop concurrency go behavior subroutine

我对我对for循环中go子程序行为的理解有些怀疑。

根据我的理解,当我们有一个for循环时:

for key := range Map {
   go subroutine(Map[key])
}

Map有,比方说3(键,值)对。

所以我的理解是子例程()函数将使用所有 Map [Key] 值并发运行,即子例程(Map [ key1 ]),子程序(Map [ key2 ])和子程序(Map [ key3 ])会同时运行吗?

我对for循环中并发子程序的理解是否正确?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

之类的东西
wg := new(sync.WaitGroup)
for key := range Map {
  wg.Add(1)
  go func() {
    subroutine(Map[key])
    wg.Done()
  }
}
wg.Wait()

或者如果您在主程序中有类似服务器循环的内容,您可能根本不需要它,因为您的程序将无法完成,直到相关信号从外部发送到它。

希望有所帮助。