【Golang】defer的使用和底层实现

📚 全文字数 : 3k

⏳ 阅读时长 : 5min

📢 关键词 : defer、资源释放、底层实现

1:defer是什么

defer是Go语言的关键字,一般用于资源的释放和异常的捕捉(比如:文件打开、加锁、数据库连接、异常捕获),defer语句后将其后面跟随的语句进行延迟处理,就是说在函数执行完毕后再执行调用,也就是return的ret指令之前。

1.1 资源释放

资源的释放在代码中有很多场景,比如打开文件描述符资源后,需要进行file.close得到释放,在打开文件后就加上defer,避免在后续因为err导致的return退出忘记释放,文件资源。

func openFile() {
	file, err := os.Open("txt")
	if err != nil {
		return
	}
	defer file.Close() //合理位置
}

常见的加锁场景,业务代码中忘记释放锁,那么会导致资源得不到释放,造成死锁,但是defer就很好解决了这个问题,不管业务逻辑怎么处理,最终还是会释放锁。

func lockScene() {
	 var mutex sync.Mutex
	 mutex.Lock()
	 defer  mutex.Unlock()
	 //业务代码...
}

1.2 捕获异常

Go 语言中 recover 关键字主要用于捕获异常,让程序回到正常状态。recover 可以中止 panic

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值