定义
- panic
- 改变程序控制流
- 立即停止当前函数剩余代码,调用defer
- 只会执行当前协程的defer
- recover
- 可以终止panic造成的程序崩溃
- 只能在defer中发挥作用
package main
import (
"fmt"
"time"
)
func main() {
defer func() {
fmt.Println("main——不是panic的协程的defer")
}()
go func() {
defer func() {
fmt.Println("panic协程——defer——执行recover")
if err := recover(); err != nil{
fmt.Println("panic协程——recover协程拉起:",err)
}
}()
defer func() {
fmt.Println("panic协程——defer——什么都不做")
}()
a := 0
fmt.Println(23/a)
//panic("go die")
fmt.Println("panic协程——after go die, can i print")
//panic之后不回调用
defer func() {
fmt.Println("panic协程——defer——panic发生后面定义")
}()
}()
//没啥作用
if err := recover(); err != nil{
fmt.Println("main——非panic协程拉起")
}
fmt.Println("main——panic after(跑的比较快)")
time.Sleep(time.Second * 3)
fmt.Println("main——panic after time")
}
输出文章来源地址https://www.toymoban.com/news/detail-822715.html
main——panic after(跑的比较快)
panic协程——defer——什么都不做
panic协程——defer——执行recover
panic协程——recover协程拉起: runtime error: integer divide by zero
main——panic after time
main——不是panic的协程的defer
文章来源:https://www.toymoban.com/news/detail-822715.html
到了这里,关于GO——recover的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!