Buffered channels【Go】
容量が決められたchannelのことを指します。
容量を決めるにはmakeを使用し、第2引数で指定します。
c := make(chan int, 2) // サイズ2のchannel
サイズを超える数をchannelに入れようとすると、deadlockエラーが発生します。
c := make(chan int, 2) c <- 100 c <- 200 c <- 300 // 3つ目を投入しようとしたので、エラー
また、channelから送信することで、channelの容量を1つ空けることができます。
channelからは、先に入れたものから取り出すことができます。
c := make(chan int, 2) c <- 100 c <- 200 x := <-c // 容量が1つ空く fmt.Println(x) // 100 c <- 300 // 問題なく受信
rangeを使ったforループを行う際、channelのindex最大値を知らせる、
close(channel)を事前に実行する必要があります。
c := make(chan int, 2) c <- 100 c <- 200 close(c) // 事前にchannelのindex最大値を知らせる for v := range c { fmt.Println(v) }