【发布时间】:2020-02-14 23:53:32
【问题描述】:
所以,我一直在摆弄go,发现下面那个函数recover成功了
package main
import (
"fmt"
)
func a() {
defer func(){
if r := recover(); r != nil {
fmt.Println("Recovered", r)
}
}()
n := []int{5, 7, 4}
fmt.Println(n[3])
fmt.Println("normally returned from a")
}
func main() {
a()
fmt.Println("normally returned from main")
}
但这不是
package main
import (
"fmt"
)
func r() {
if r := recover(); r != nil {
fmt.Println("Recovered", r)
}
}
func a() {
defer func(){
r()
}()
n := []int{5, 7, 4}
fmt.Println(n[3])
fmt.Println("normally returned from a")
}
func main() {
a()
fmt.Println("normally returned from main")
}
谁能解释为什么?我一直在寻找答案,但没有找到任何我能完全理解的东西。 谢谢。
【问题讨论】: