一、前言两个功能相似的多个同类协程使用同类资源时候需要用到的协程池满足并发工作需求。二、学习代码工作池用result通道来收集完成情况package main import ( fmt time ) func worker(id int, jobs -chan int, results chan- int) { for j : range jobs { fmt.Println(worker, id, started job, j) time.Sleep(time.Second) fmt.Println(worker, id, finished job, j) results - j * 2 } } func main() { const numJobs 5 jobs : make(chan int, numJobs) results : make(chan int, numJobs) for w : 1; w 3; w { go worker(w, jobs, results) } for j : 1; j numJobs; j { jobs - j } close(jobs) for a : 1; a numJobs; a { //用循环模拟等待全部工人完成工作 -results } }WaitGroup用特殊的WaitGroup变量来对协程进行处理。package main import ( fmt sync time ) func worker(id int, jobs -chan int, wg *sync.WaitGroup) { defer wg.Done() for j : range jobs { fmt.Println(worker, id, started job, j) time.Sleep(time.Second) fmt.Println(worker, id, finished job, j) } //wg.Done() } func main() { const numJobs 5 const numWorkers 3 var wg sync.WaitGroup wg.Add(numWorkers) jobs : make(chan int, numJobs) for w : 1; w numWorkers; w { go worker(w, jobs, wg) } for j : 1; j numJobs; j { jobs - j } close(jobs) wg.Wait() }