defer、panic、recover
这三个关键字都和函数退出、异常情况有关。
初学阶段先记住:
defer常用。panic少用。recover更少用,主要在边界层兜底。
一、defer
defer 会把函数调用延迟到当前函数返回前执行。
输出:
二、defer 常用于释放资源
只要文件打开成功,就立刻写 defer file.Close(),避免后面忘记关闭。
三、多个 defer 的执行顺序
多个 defer 后进先出。
输出:
四、panic
panic 表示程序遇到无法继续执行的严重错误。
普通业务错误不要用 panic。
例如用户不存在,应该返回 error,不是 panic。
五、recover
recover 可以捕获 panic,必须配合 defer 使用。
六、Web 服务里的 recover
HTTP 服务可以在中间件里统一 recover,避免某个请求 panic 导致整个服务退出。
业务函数里仍然应该优先返回 error。
七、使用建议
panic/recover 不是 Go 的日常错误处理方式。日常业务代码主要使用 error。

