typeworkerstruct{inchanintdonechanbool// 同步信号量
}funcdoWork(idint,wworker){forn:=rangew.in{fmt.Printf("worker %d received %c\n",id,n)w.done<-true}}funccreateWorker(iint,wworker)worker{w=worker{in:make(chanint),done:make(chanbool),}godoWork(i,w)returnw}funcchannelDemo(){varworkers[10]workerfori:=rangeworkers{workers[i]=createWorker(0,workers[i])}fori:=rangeworkers{workers[i].in<-'a'+i<-workers[i].done}}
output
1
2
3
4
5
6
7
8
9
10
worker 0 received a
worker 0 received b
worker 0 received c
worker 0 received d
worker 0 received e
worker 0 received f
worker 0 received g
worker 0 received h
worker 0 received i
worker 0 received j
funcdoWork(idint,wworker){forn:=rangew.in{fmt.Printf("worker %d received %c\n",id,n)gofunc(){w.done<-true}()}}funccreateWorker(iint,wworker)worker{w=worker{in:make(chanint),done:make(chanbool),}godoWork(i,w)returnw}funcchannelDemo(){varworkers[10]workerfori:=rangeworkers{workers[i]=createWorker(0,workers[i])}fori,w:=rangeworkers{w.in<-'a'+i}fori,w:=rangeworkers{w.in<-'A'+i}for_,w:=rangeworkers{<-w.done}}funcmain(){channelDemo()}