اختبارات

panic/recover 2

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


package main

func main() {
	defer func() {
		println(recover().(int))
	}()
	defer func() {
		defer func() {
			recover()
		}()
		defer recover()
		panic(3)
	}()
	defer func() {
		defer func() {
			defer func() {
				recover()
			}()
		}()
		defer recover()
		panic(2)
	}()
	panic(1)
}

الخيارات:

  • 1
  • 2
  • 3

الإجابة: 2

شغِّله على Go play.

النقاط الأساسية:

  • باستثناء نداءي recover في السطرين 9 و5، فإن النداءات الأخرى كلها بلا تأثير.
  • نداء recover في السطر 9 يستردّ حالة panic 3.
  • نداء recover في السطر 5 يستردّ حالة panic 2.
  • حالة panic 1 لا تُستردّ أبدًا، لكنها تُكبَت بفعل حالة panic 2.

يُرجى قراءة شرح آلية panic/recover بالتفصيل للتفاصيل.