panic
//panic用于不可以恢复的错误
//panic退出前会执行defer指定的内容
//defer 延迟执行函数 函数返回前才会执行到defer这个函数 一般用作资源清理/释放锁
//os.Exit
//os.Exit退出的时候不会调用defer指定的函数
//os.Exit退出的时候不输出当前调用栈信息
recover
//不希望程序在抛出异常后中断或者退出 捕捉异常
//panic里面传递的错误,返回给recover
//使用recover 主要是做程序恢复的工作
//使用之后,没有打印调用栈,程序也没有异常退出
//小心使用,避免错误的使用错误恢复机制
//recover修复方式带来的危害 不看错误不改错 记录了一下忽略掉了
//形成僵尸服务进程,导致health check失效
//Let it crash 是回复不确定性错误的方法 可恢复的设计模式
代码
package panic_recover_test
import (
"errors"
"fmt"
"os"
"testing"
)
func TestPanicVxExit(t *testing.T){
defer func() {
if err:= recover();err != nil{
fmt.Println("recover from",err)
}
}()
fmt.Println("Strat")
//panic通常会传递一个空接口 一般是一个错误信息
panic(errors.New("Something wrong!"))
os.Exit(-1)
fmt.Println("End")
//主要区别 panic会显示调用栈信息 os.Exit会返回状态码,但是不打印堆栈信息
}