我对我对for循环中go子程序行为的理解有些怀疑。
根据我的理解,当我们有一个for循环时:
for key := range Map {
go subroutine(Map[key])
}
Map有,比方说3(键,值)对。
所以我的理解是子例程()函数将使用所有 Map [Key] 值并发运行,即子例程(Map [ key1 ]),子程序(Map [ key2 ])和子程序(Map [ key3 ])会同时运行吗?
我对for循环中并发子程序的理解是否正确?
谢谢!
答案 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()
或者如果您在主程序中有类似服务器循环的内容,您可能根本不需要它,因为您的程序将无法完成,直到相关信号从外部发送到它。
希望有所帮助。