采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
关于 defer 使用的问题
西西老师,我看到你的代码里defer函数都是在最后一行返回之前,但是我测试,如果之前有err的话,函数不会执行最后那个defer 语句,这个close()函数是不是就失效了呀。我觉得defer放在图中划线的地方比较好。您看下是不是? 下图是测试函数,我专门写错sql语句,但是test的时候没有执行defer 9999语句,那close是不是也执行不了?
首先你这个验证是对的,defer确实有一些出栈操作顺序的坑。
不过这个例子恰好相反,我们需要预先判断打开dbConn是否会出错,如果出错,是拿不到相应的资源的,这个时候提前返回反而不会panic,如果这个时候还defer,那么有可能会报空指针异常等问题。只有err为空,defer的时候关闭资源才能正常关闭
非常感谢!
登录后可查看更多问答,登录/注册
从零开始,全面掌握Go语言编码的架构风格和开发Web的关键技能
1.6k 13
1.6k 8
1.7k 7
1.1k 7
2.3k 7
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号