チャネルにはバッファを指定する事ができます。
今まではバッファなしのチャネルを使用しました。
バッファを指定した場合の動作を確認したいと思います。
バッファの指定
チャネルへバッファを指定して動作を確認します。
package main
import (
"fmt"
"time"
)
func sampleGoRoutineA(channel chan<- string) {
fmt.Printf("【開始】 " + time.Now().Format(time.TimeOnly) + " sampleGoRoutineA \n")
time.Sleep(5 * time.Second)
fmt.Printf("【終了】 " + time.Now().Format(time.TimeOnly) + " sampleGoRoutineA \n")
channel <- "ああああ"
channel <- "終了A"
}
func main() {
channelA := make(chan string, 1)
go sampleGoRoutineA(channelA)
a := <-channelA
fmt.Printf(a + ": " + time.Now().Format(time.TimeOnly) + "\n")
}
結果は以下の通りです。当たり前ですが、先に書き込みが行われた”ああああ”が読み込まれたら処理が進み、”終了A”は読み込まれませんでした。
【開始】 10:17:51 sampleGoRoutineA
【終了】 10:17:56 sampleGoRoutineA
ああああ: 10:17:56