我对我对 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()
或者,如果您在主例程中进行诸如服务器循环之类的事情,您可能根本不需要它,因为在向外部发送相关信号之前,您的程序不会完成。
- 1 回答
- 0 关注
- 169 浏览
添加回答
举报
0/150
提交
取消