1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package main
import ( "fmt" "sync" )
type worker struct { in chan int done *sync.WaitGroup }
func main() { const count = 4
var wg sync.WaitGroup
var workers [count]worker for i := 0; i < count; i++ { workers[i] = createWorker(i, &wg) }
wg.Add(count * 2) for i, worker := range workers { worker.in <- 'a' + i }
for i, worker := range workers { worker.in <- 'A' + i }
wg.Wait() }
func doWork(id int, w worker) { for { fmt.Printf("No.%d worker received: %c\n", id, <-w.in) w.done.Done() } }
func createWorker(id int, wg *sync.WaitGroup) worker { w := worker{ in: make(chan int), done: wg, } go doWork(id, w) return w }
|