Go
投稿日

【Go】チャネルのバッファ

チャネルにはバッファを指定する事ができます。

今まではバッファなしのチャネルを使用しました。
バッファを指定した場合の動作を確認したいと思います。

バッファの指定

チャネルへバッファを指定して動作を確認します。

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

コメントを残す

メールアドレスが公開されることはありません。

© DeNnie.Lab All Rights Reserved.