チャネル
値を受け取るまで停止するなどの機能から,同期を実現するために有用. code:semaphone.go
var sem = make(chan int, MaxOutstanding)
func handle(r *Request) {
sem <- 1 // semが溢れそうだとここでgoroutineが止まる
process(r)
<-sem // Done, enable next request to run.
}
func Serve(queue chan *Request) {
for {
req := <-queue
go handle(req)
}
}
色々な状態がある
closedかどうか
<-chan Tやchan<- Tなどが型としてある.