golangpackage 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 许可协议。转载请注明出处!