Range Over Channels

Range over Channels #

// [ယခင်](range) ဥပမာမှာ `for` နဲ့ `range` က အခြေခံ data structure တွေကို
// ဘယ်လို iterate လုပ်သလဲဆိုတာ တွေ့ခဲ့ပါတယ်။ ဒီ syntax ကိုပဲ channel ကနေ
// လက်ခံရရှိတဲ့ တန်ဖိုးတွေကို iterate လုပ်ဖို့လည်း သုံးနိုင်ပါတယ်။

package main

import "fmt"

func main() {

	// `queue` channel ထဲက တန်ဖိုး 2 ခုကို iterate လုပ်ပါမယ်။
	queue := make(chan string, 2)
	queue <- "one"
	queue <- "two"
	close(queue)

	// ဒီ `range` က `queue` ကနေ လက်ခံရရှိတဲ့ element တိုင်းကို iterate လုပ်ပါတယ်။
	// အပေါ်မှာ channel ကို `close` လုပ်ထားတဲ့အတွက် တန်ဖိုး 2 ခုကို
	// လက်ခံရရှိပြီးတဲ့နောက် iteration က ရပ်တန့်သွားပါတယ်။
	for elem := range queue {
		fmt.Println(elem)
	}
}
$ go run range-over-channels.go
one
two

# ဒီဥပမာက empty မဟုတ်တဲ့ channel 
# ကိုတောင် ပိတ်လို့ရပြီး
# ကျန်ရှိနေသေးတဲ့ တန်ဖိုးတွေကို 
# ဆက်လက်လက်ခံနိုင်သေးတယ်ဆိုတာကိုလည်း
# ပြသထားပါတယ်။