2014-03-04 18 views
0

對於我對for循環中go子例程行爲的理解,我有些疑惑。GO - for循環中的子例程行爲

從我的理解,當我們有一個循環:

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

如果地圖有,比方說3(鍵,值)對。

所以我的理解是,子程序()功能將使用所有地圖[關鍵]值,即子程序(圖[key1的]),子程序(圖[密鑰2])同時運行子程序(Map [key3])都會同時運行?

我對for循環中的併發子程序的理解是否正確?

謝謝!

+3

你在找什麼比是/否的答案? (答案雖然,是的)。 – nos

+0

我只是想要一個確認或更正,如果我的理解是關閉的。謝謝! – sSmacKk

+1

是,如果沒有任何內容等待子程序完成你的程序可以在子程序完成之前退出 – Krut

回答

1

是的。請記住,在程序結束之前,您仍然需要主要的goroutine才能完成。您可以使用類似sync.WaitGroup:

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

或者,如果您有類似的服務器循環在主程序怎麼回事,你可能並不需要,在所有因爲你的程序將無法完成,直到相關的信號從外部發送給它。

希望有所幫助。