Channel Buffering

Channel Buffering #

// ပုံမှန်အားဖြင့် channel တွေက _unbuffered_ ဖြစ်ပါတယ်။ ဆိုလိုတာက
// ပို့လိုက်တဲ့တန်ဖိုး (`chan <-`) ကို လက်ခံဖို့ (`<- chan`) အဆင်သင့်ရှိနေမှသာ
// ပို့တာကို လက်ခံမှာဖြစ်ပါတယ်။ _Buffered channel_ တွေကတော့ သတ်မှတ်ထားတဲ့
// အရေအတွက်အထိ တန်ဖိုးတွေကို လက်ခံသူမလိုပဲ လက်ခံနိုင်ပါတယ်။

package main

import "fmt"

func main() {

	// ဒီမှာ တန်ဖိုး 2 ခုအထိ buffer လုပ်နိုင်တဲ့ string channel တစ်ခုကို `make` နဲ့ဖန်တီးထားပါတယ်။
	messages := make(chan string, 2)

	// ဒီ channel က buffered ဖြစ်တဲ့အတွက် ဒီတန်ဖိုးတွေကို တပြိုင်နက်တည်း
	// လက်ခံနေတဲ့သူမရှိပဲနဲ့ channel ထဲကို ပို့လို့ရပါတယ်။
	messages <- "buffered"
	messages <- "channel"

	// နောက်ပိုင်းမှ ဒီတန်ဖိုးနှစ်ခုကို ပုံမှန်အတိုင်း လက်ခံယူလို့ရပါတယ်။
	fmt.Println(<-messages)
	fmt.Println(<-messages)
}
$ go run channel-buffering.go 
buffered
channel