在Golang中,WaitGroup是一種用于等待一組goroutine完成執(zhí)行的機制。它可以用來確保在主goroutine結(jié)束之前,所有的子goroutine都已經(jīng)執(zhí)行完畢。
要使用WaitGroup,首先需要導入sync
包。然后,可以創(chuàng)建一個WaitGroup對象,并使用Add
方法來設(shè)置需要等待的goroutine數(shù)量。接下來,在每個子goroutine的末尾使用Done
方法來標記一個子goroutine的結(jié)束。最后,在主goroutine中使用Wait
方法來等待所有的子goroutine完成執(zhí)行。
下面是一個使用WaitGroup的簡單示例:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Println("Goroutine", i, "is done")
}(i)
}
wg.Wait()
fmt.Println("All goroutines finished executing")
}
在上面的示例中,我們創(chuàng)建了一個包含5個子goroutine的循環(huán)。每個子goroutine都會輸出一個簡單的消息,并在結(jié)束時調(diào)用Done
方法。最后,我們在主goroutine中調(diào)用Wait
方法來等待所有的子goroutine完成執(zhí)行。
運行上面的代碼,你會看到類似以下的輸出:
Goroutine 0 is done
Goroutine 1 is done
Goroutine 3 is done
Goroutine 4 is done
Goroutine 2 is done
All goroutines finished executing
可以看到,所有的子goroutine都已經(jīng)執(zhí)行完畢,然后主goroutine輸出了"所有g(shù)oroutine都已經(jīng)執(zhí)行完畢"的消息。
總結(jié)來說,WaitGroup是一種在Golang中等待一組goroutine完成執(zhí)行的機制。通過調(diào)用Add
方法設(shè)置需要等待的goroutine數(shù)量,調(diào)用Done
方法標記一個goroutine的結(jié)束,以及調(diào)用Wait
方法來等待所有的goroutine完成執(zhí)行。這是在并發(fā)編程中非常常用的一種技術(shù)。