请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于defer使用的问题

关于 defer 使用的问题

西西老师,我看到你的代码里defer函数都是在最后一行返回之前,但是我测试,如果之前有err的话,函数不会执行最后那个defer 语句,这个close()函数是不是就失效了呀。我觉得defer放在图中划线的地方比较好。您看下是不是?
图片描述
下图是测试函数,我专门写错sql语句,但是test的时候没有执行defer 9999语句,那close是不是也执行不了?
错误的sql语句测试结果

正在回答

1回答

首先你这个验证是对的,defer确实有一些出栈操作顺序的坑。

不过这个例子恰好相反,我们需要预先判断打开dbConn是否会出错,如果出错,是拿不到相应的资源的,这个时候提前返回反而不会panic,如果这个时候还defer,那么有可能会报空指针异常等问题。只有err为空,defer的时候关闭资源才能正常关闭

0 回复 有任何疑惑可以回复我~
  • 提问者 白小九jiu #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-04-27 10:12:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信