以下の内容はhttps://tech-up.hatenablog.com/entry/2018/12/02/191909より取得しました。


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)
}





以上の内容はhttps://tech-up.hatenablog.com/entry/2018/12/02/191909より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14