ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 什么是panic Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。**这些运行时错误会引起painc异常**。 可以看出,error是用来处理我们可控的错误,而panic是运行时不可控的因素. ## panic和defer 一般而言,当panic异常发生时,程序会中断运行,并立即执行在该goroutine。随后,程序崩溃并输出日志信息。 ## main goroutine panic 如果panic发生在主goroutine,那么所有其他的子goroutine都会停止运行. ~~~ func main() { go func() { for i := 0; i < 100; i++ { fmt.Println(i) time.Sleep(time.Second) } }() time.Sleep(10 * time.Second) panic("错误啦") } ~~~ 结果: ``` 0 1 2 3 4 5 6 7 8 9 panic: 错误啦 ``` ## 子goroutine panic 子goroutine panic同样会导致整个程序宕机. ~~~ func main() { for i := 0; i < 100; i++ { go func() { fmt.Println(i) if i == 10 { panic("错误啦") } }() time.Sleep(time.Second / 2) } time.Sleep(100000 * time.Second) } ~~~ 结果: ``` 0 1 2 3 4 5 6 7 8 9 10 panic: 错误啦 ```