【发布时间】:2020-06-22 02:24:46
【问题描述】:
我是新手,学习推迟。我想知道为什么第一个有效而第二个无效。我想知道它们之间有什么区别。 第一:
func say(s string) {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in cleanup:", r)
}
wg.Done()
}()
for i := 0; i < 3; i++ {
fmt.Println(s)
time.Sleep(time.Millisecond * 100)
if i == 2 {
panic("oh")
}
}
}
第二:
func cleanup(){
if r := recover(); r != nil {
fmt.Println("Recovered in cleanup:", r)
}
}
func say(s string) {
defer func() {
cleanup()
wg.Done()
}()
for i := 0; i < 3; i++ {
fmt.Println(s)
time.Sleep(time.Millisecond * 100)
if i == 2 {
panic("oh")
}
}
}
【问题讨论】:
-
换句话说,为什么recover() 在第二种情况下会为零?提前谢谢你。