ماذا يطبع البرنامج التالي؟
package main
func main() {
c := make(chan int, 1)
for done := false; !done; {
select {
default:
print(1)
done = true
case <-c:
print(2)
c = nil
case c <- 1:
print(3)
}
}
}
الخيارات:
- 321
- 21
- 1
الإجابة: 321
شغِّله على Go play.
النقاط الأساسية:
- في الخطوة الأولى من الحلقة، تكون العملية
c <- 1وحدها غير حاجبة. لذا يُختار فرعcaseالأخير. - في الخطوة الثانية من الحلقة، تكون العملية
<-cوحدها غير حاجبة. لذا يُختار فرعcaseالأول. - في الخطوة الثالثة من الحلقة، تكون عمليتا القناة كلتاهما حاجبتين. لذا يُختار فرع
default.