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

标签 for-loop concurrency go behavior subroutine

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

据我了解,当我们有一个 for 循环时:

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

假设 Map 有 3 个(键,值)对。

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

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

谢谢!

最佳答案

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

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

或者,如果您在主例程中进行类似服务器循环的操作,您可能根本不需要它,因为您的程序只有在从外部向其发送相关信号后才会结束。

希望对您有所帮助。

关于for-loop - GO - for 循环中的子例程行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181660/

相关文章:

bash - 使用 bash 循环重命名多个文件

java - 此堆栈转储是否表明我遇到了死锁?

r - 使用 for 循环对多个公司和多个日期进行事件研究

JavaScript (ES6) : any more efficient way than "for loops"?

java - Java中的构造函数同步

python - 使用单个终端接口(interface)处理多个客户端请求

golang : client tls. Conn 关闭钩子(Hook)

戈朗 : cannot send on channel

json - 如何在 Golang 中根据对象类型解码 JSON

javascript - 使用 jQuery.post() 的 for 循环中的关联数组导致仅存储最后一个条目