我对我对 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/