可以使用sync.WaitGroup来等待多个协程结束。

示例代码:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done()
	fmt.Printf("Worker %d starting\n", id)
	for i := 0; i < 5; i++ {
		fmt.Printf("Worker %d: %d\n", id, i)
	}
	fmt.Printf("Worker %d done\n", id)
}

func main() {
	var wg sync.WaitGroup
	for i := 1; i <= 3; i++ {
		wg.Add(1)
		go worker(i, &wg)
	}
	wg.Wait()
	fmt.Println("All workers done")
}

输出:

Worker 1 starting
Worker 2 starting
Worker 3 starting
Worker 2: 0
Worker 2: 1
Worker 2: 2
Worker 2: 3
Worker 2: 4
Worker 2 done
Worker 3: 0
Worker 3: 1
Worker 3: 2
Worker 3: 3
Worker 3: 4
Worker 3 done
Worker 1: 0
Worker 1: 1
Worker 1: 2
Worker 1: 3
Worker 1: 4
Worker 1 done
All workers done
golang 等带多个协程结束

原文地址: http://www.cveoy.top/t/topic/uia 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录