package main
import (
"fmt"
"sync"
)
func worker(ch <-chan int, result chan<- int) {
defer wg.Done()
for v := range ch {
result <- v * v
}
}
func produce(ch chan<- int, num int) {
for i := 0; i < num; i++ {
ch <- i
}
close(ch)
}
var wg sync.WaitGroup
func main() {
ch := make(chan int, 1)
result := make(chan int, 1)
for i := 0; i < 20; i++ {
wg.Add(1)
go worker(ch, result)
}
go produce(ch, 10)
// 等待所有 worker 完成后,关闭 result channel
go func() {
wg.Wait()
close(result)
}()
for v := range result {
fmt.Println(v)
}
}