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

我对我对 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 循环中并发子例程的理解是否正确?


DIEA
浏览 170回答 1
1回答

绝地无双

是的。请记住,在程序结束之前,您仍然需要主 goroutine 活着才能完成这些。你可以使用类似 sync.WaitGroup 的东西:wg := new(sync.WaitGroup)for key := range Map {  wg.Add(1)  go func() {    subroutine(Map[key])    wg.Done()  }}wg.Wait()或者,如果您在主例程中进行诸如服务器循环之类的事情,您可能根本不需要它,因为在向外部发送相关信号之前,您的程序不会完成。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go