recovery恢复
概念:定义在 defer关键字后的延迟函数中。使用内置函数 recover()来执行恢复操作。执行的流程如下

具体的例子如下
failTime := make(chan int) go func(failTime chan int) { defer func() { if p := recover(); p != nil { fmt.Println("compress is recover", p) } }() fmt.Println("start compress") for i := 0; i < 10; i++ { if i == 7 { failTime <- 1 panic("compress is error") } } }(failTime) count := <-failTime fmt.Printf("compress is done, fail:%d, success:%d", count, (10 - count))
|
上面函数模拟对一个文件压缩多次,记录其中失败的次数(或者编号)从而重试压缩程序运行的结果如下
start compress compress is recover compress is error compress is done, fail:1, success:9
|
recover()函数的使用非常的简单,并且在没有错误的情况下调用函数会返回一个nil