وفق مواصفة Go، يطبع البرنامج التالي 123.
package main
import "fmt"
func main() {
defer foo()
panic(123)
}
func foo() {
for range 1 {
fmt.Println(recover()) // 123
}
}
وبالمثل، ينبغي أن يطبع البرنامج التالي أيضًا 123. لكنه يطبع <nil> ثم ينهار (منذ إصدار سلسلة أدوات Go 1.23.0).
package main
import "fmt"
func main() {
defer foo()
panic(123)
}
func foo() {
for range iter {
fmt.Println(recover())
}
}
func iter(yield func() bool) {
yield()
}
(المسألة ذات الصلة: https://github.com/golang/go/issues/71685.)