defer 会在函数返回之前执行传入的函数,经常被用来关闭文件描述符,关闭数据库连接,以及解锁
栈的顺序进行执行
panic
当 panic 异常发生的时候,程序会中断执行,并立即执行在该 go routine 中被延迟的 函数 defer 机制
随后,程序 奔溃并输出日志信息
利用 panic 之后要先执行 defer 的机制就可以实现在 panic 的时候也能进行资源释放
panic 指挥触发当前 go routine 的 defer 语句
recover
recover 可以中止 panic 造成的程序奔溃
只能在 defer 中发挥作用
recover 必须在 defer 中调用
recover 只能恢复同一个协程中 的 panic
并不是所有的 panic 都可以被 recover 掉