// 要等待多个goroutine完成,可以使用WaitGroup package main import ( "fmt" "sync" "time" ) // 在每个goroutine中运行的函数 // 注意必须通过指针将WaitGroup传递给函数 func worker(id int, wg *sync.WaitGroup) { fmt.Printf("Worker %d starting\n", id) time.Sleep(time.Second) //Sleep函数模拟执行任务 fmt.Printf("Worker %d done\n", id) wg.Done() // 通知WaitGroup工作已经完成 } func main() { var wg sync.WaitGroup // 此WaitGroup用于等待此处启动的所有goroutine完成 for i := 1; i < 5; i++ { // 启动多个goroutine,并为每个goroutine增加WaitGroup计数器 wg.Add(1) go worker(i, &wg) } wg.Wait() // 阻塞,知道WaitGroup计数器返回0,即所以goroutine通知他们已经完成 }