2025-01-22
golang
00

目录

问题:下列代码的输出结果是什么
结果: 空
核心概念:
问题解析:

问题:下列代码的输出结果是什么

golang
package main import "fmt" func main() { defer func() { if err := recover(); err != nil { fmt.Println(1) } }() go func() { panic("123") }() defer func() { if err := recover(); err != nil { fmt.Println("recover") } }() }

结果: 空

核心概念:

defer 和 recover:

recover 只能捕获当前 goroutine 中发生的 panic。 defer 的调用顺序是后进先出 (LIFO)。

goroutine 的作用域:

每个 goroutine 都是独立的,发生在某个 goroutine 中的 panic 不会直接影响其他 goroutine。 如果一个 goroutine 中没有捕获 panic,该 goroutine 将直接崩溃,其他 goroutine 不会受影响。

问题解析:

golang
新 goroutine 中的 panic 未被捕获,但也不会影响主 goroutine。 主 goroutine 没有发生 panic,因此两个 recover 均不会被触发。 因此最终输出为空

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!