اختبارات

قناة 1

ماذا يطبع البرنامج التالي؟


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.