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