ماذا يطبع البرنامج التالي؟
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 يستردّ حالة panic3. - نداء
recoverفي السطر 5 يستردّ حالة panic2. - حالة panic
1لا تُستردّ أبدًا، لكنها تُكبَت بفعل حالة panic2.
يُرجى قراءة شرح آلية panic/recover بالتفصيل للتفاصيل.