在Golang中,WaitGroup是一種用于等待一組goroutine完成執行的機制。它可以用來確保在主goroutine結束之前,所有的子goroutine都已經執行完畢。
要使用WaitGroup,首先需要導入sync
包。然后,可以創建一個WaitGroup對象,并使用Add
方法來設置需要等待的goroutine數量。接下來,在每個子goroutine的末尾使用Done
方法來標記一個子goroutine的結束。最后,在主goroutine中使用Wait
方法來等待所有的子goroutine完成執行。
下面是一個使用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")
}
在上面的示例中,我們創建了一個包含5個子goroutine的循環。每個子goroutine都會輸出一個簡單的消息,并在結束時調用Done
方法。最后,我們在主goroutine中調用Wait
方法來等待所有的子goroutine完成執行。
運行上面的代碼,你會看到類似以下的輸出:
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都已經執行完畢,然后主goroutine輸出了"所有goroutine都已經執行完畢"的消息。
總結來說,WaitGroup是一種在Golang中等待一組goroutine完成執行的機制。通過調用Add
方法設置需要等待的goroutine數量,調用Done
方法標記一個goroutine的結束,以及調用Wait
方法來等待所有的goroutine完成執行。這是在并發編程中非常常用的一種技術。