Channel တစ်ခုကို ပိတ်လိုက်ခြင်း (Closing) က အဲဒီ channel ပေါ်မှာ နောက်ထပ်တန်ဖိုးတွေ ပို့တော့မှာ မဟုတ်ဘူးဆိုတာကို ပြောလိုက်တာပါ။ ဒါက channel ကနေ လက်ခံနေသူတွေဆီကို ပြီးဆုံးကြောင်း အသိပေးဖို့ အသုံးဝင်ပါတယ်။ |
|
package main |
|
import "fmt" |
|
ဒီဥပမာမှာ |
func main() { jobs := make(chan int, 5) done := make(chan bool) |
ဒါက worker goroutine ပါ။ သူက |
go func() { for { j, more := <-jobs if more { fmt.Println("received job", j) } else { fmt.Println("received all jobs") done <- true return } } }() |
ဒါက worker ဆီကို |
for j := 1; j <= 3; j++ { jobs <- j fmt.Println("sent job", j) } close(jobs) fmt.Println("sent all jobs") |
အရင်က တွေ့ခဲ့တဲ့ synchronization နည်းလမ်းကို သုံးပြီး worker ကို စောင့်ပါတယ်။ |
<-done } |
$ go run closing-channels.go sent job 1 received job 1 sent job 2 received job 2 sent job 3 received job 3 sent all jobs received all jobs |
|
Channel တွေကို ပိတ်တဲ့ သဘောတရားက နောက်ဥပမာဖြစ်တဲ့
channel တွေပေါ်မှာ |
နောက်ဥပမာ: Range over Channels.