defer关键字的使用

本文介绍了Go语言中的defer关键字,其主要用于确保资源的正确释放。defer的工作原理是推迟执行其后的语句,并遵循先进后出的原则。文章通过示例详细解释了只有一个defer和多个defer的执行顺序,强调了defer在管理文件关闭、数据库连接等操作中的重要作用。同时,文中指出defer只能跟随函数调用,不能是变量,并提到了在return之后的defer不会执行的情况。
摘要由CSDN通过智能技术生成

在编程中,我们经常有读取文件或者连接数据库资源等操作,每次读取文件后,我们就要关闭文件流,每次连接数据库后,我们都需要断开连接

在Java中,我们利用 try-catch-finally来处理这些问题,把要关闭的资源放在finally中,确保每次关闭资源都会被执行到,而且这样写,就不会忘记关闭资源了,也让我们知道在何时何地可以关闭资源,因为这个 try-catch-finally是可以成对出现的。而在Go中,没有 try-catch-finally来确保我们每次不会忘记关闭资源,也因为没有这个关键字让我们不知道在什么时候关闭资源,但是呢,Go语言提供了一个叫做 defer的关键字,来确保我们可以每次使用资源后,都可以不会忘记关闭资源,也解决了我们不知道在什么时候关闭资源的问题,那么 defer到底有什么用呢?

defer的介绍

defer关键字,从它的字面意思看,可以看出它有推迟的意思,所以它的功能是推迟执行defer关键字后面所带的内容,然后在函数的最后面执行这些内容推迟的内容

如果有多个defer关键字,那么这些defer关键字最后的执行顺序是什么?

defer遵循着先进后出的规则,也就是你越先写的defer,在函数最后面越晚执行到

只有一个defer的情况

使用defer关键字前的执行顺序

package main
import "fmt"

func main()  {
   

	fmt.Println("连接数据库")
	fmt.Println("关闭数据库")
	fmt.Println("-----------")
}
//输出:
//连接数据库
//关闭数据库
//-----------

从输出我们可以看出,我们在连接数据库后,后面就调用了关闭数据库的操作(虽然这里是打印而已,不过不要太在意),然后在函数最后还写了个打印语句。这样看起来是没问题,但是我们如果还要进行其它关于数据库的操作,那么连接数据库后,就关闭显然不太合适了,而且我们也不知道连接之后,在哪里还需要操作,所以对于这个关闭操作,放在哪里就有点让人纠结了。

不过没什么关系,我们只要确保每次连接数据库后,在最后函数结束的时候,能帮我们关闭连接资源就好,所以这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值