在Golang中,可以使用并發控制來管理多個goroutine的執行。其中,一個常見的并發控制機制是使用sync.WaitGroup
。
sync.WaitGroup
是Golang標準庫中的一個結構體,用于等待一組goroutine執行完成。它提供了以下三個方法:
Add(delta int)
:增加等待的goroutine數量,delta為正值表示增加,負值表示減少。
Done()
:表示一個goroutine已經執行完成,減少等待的goroutine數量。
Wait()
:阻塞,直到所有等待的goroutine執行完成。
下面是一個使用sync.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, "done")
}(i)
}
wg.Wait()
fmt.Println("all goroutines done")
}
在上面的示例中,首先創建了一個sync.WaitGroup
實例wg
。然后,使用Add
方法增加了5個等待的goroutine數量。接著,使用go
關鍵字創建了5個goroutine,每個goroutine打印了自己的id并調用Done
方法表示執行完成。最后,調用wg.Wait()
方法阻塞,直到所有goroutine執行完成。
需要注意的是,每個goroutine中必須調用Done
方法來通知sync.WaitGroup
已完成。否則,Wait
方法會一直阻塞。
使用sync.WaitGroup
可以方便地管理多個goroutine的并發執行,等待它們全部執行完成后再進行下一步操作。