以下是一个具有四个 goroutine 的示例,每个都会打印出数字 0 到 9。
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 4; i++ {
wg.Add(1)
// 匿名函数
go func(id int) {
for j := 0; j < 10; j++ {
fmt.Printf("Goroutine %d: %d\n", id, j)
}
wg.Done()
}(i)
}
wg.Wait()
}
在以上示例中,我们使用了一个 sync.WaitGroup
变量来等待所有 goroutine 完成其工作。我们使用 Add(1)
方法告诉 WaitGroup 有一个新的 goroutine,项目数增加了 1。在每个 goroutine 的结尾,我们使用 Done()
方法告诉 WaitGroup 这个 goroutine 完成了其任务,项目数减少了 1。最后,我们使用 Wait()
方法来阻塞程序,直到所有 goroutine 完成其任务为止。