package main
import (
"fmt"
)
func tricky() (err error) {
defer func() {
fmt.Println("D1:", err) // состояние именованного результата до recover
if r := recover(); r != nil {
err = fmt.Errorf("recovered: %v", r)
}
fmt.Println("D2:", err) // состояние после recover
}()
defer func() {
panic(2) // паника №2 во время размотки стека
}()
panic(1) // паника №1
}
func main() {
fmt.Println("start")
fmt.Println("ret:", tricky())
fmt.Println("end")
}
Вопросы:
🟠Какой будет порядок строк start, D1: ..., D2: ..., ret: ..., end?
🟠Какое значение попадёт в err и что напечатает fmt.Println("ret:", ...)?
🟠Почему паника из второго defer меняет исход паники?
@golangtests