23. Go 语言函数中的 defer

AI 概述
1. defer 的逆序执行2. defer 中的变量3. 小结 在 Go 语言中的 defer 关键字就是 Go 语言中延迟语句的标志。Go 语言会在函数即将返回时按逆序执行 defer 后的语句。也就是说先被 defer 的语句后执行,最先执行最后被 defer 的语句。defer 和有些语言中的 finally 语句块的用法类似,一般都用于释放一些...
目录
文章目录隐藏
  1. 1. defer 的逆序执行
  2. 2. defer 中的变量
  3. 3. 小结

在 Go 语言中的 defer 关键字就是 Go 语言中延迟语句的标志。Go 语言会在函数即将返回时逆序执行 defer 后的语句。也就是说先被 defer 的语句后执行,最先执行最后被 defer 的语句。defer 和有些语言中的 finally 语句块的用法类似,一般都用于释放一些资源,最常用的地方就是进程锁的释放。

Tips:关于 defer 的进程锁的释放在 Go 语言的多线程中会有介绍。

1. defer 的逆序执行

defer 会在函数即将结束的时候执行,而且是按照 defer 的顺序逆序执行。

代码示例:

package main

import "fmt"

func main() {
    defer fmt.Println("第一个 defer 的语句")
    defer fmt.Println("第二个 defer 的语句")
    defer fmt.Println("第三个 defer 的语句")
    fmt.Println("Hello Codey!")
}
  • 第 6 行:第一个 defer 的语句,最后一个执行;
  • 第 7 行:第二个 defer 的语句,第二个执行;
  • 第 8 行:第一个 defer 的语句,最后一个执行。

执行结果:

Go 语言函数中的 defer

2. defer 中的变量

defer 关键字之后若有变量,则 defer 记录的是在 defer 时的变量值,而不是最后函数结束时的变量值。

代码示例:

package main

import "fmt"

func main() {
    a := 10
    defer fmt.Println("defer 时 a 的值为", a)
    a = 100
    fmt.Println("print 时 a 的值为", a)
}
  • 第 7 行:此时变量 a 的值为 10,所以 defer 输出时 a 的值为 10;
  • 第 8 行:此时变量 a 的值为 100,所以输出时 a 的值为 100。

执行结果:

defer 中的变量

3. 小结

本文主要介绍了 Go 语言中 defer 的使用,需要注意以下几点:

  • defer 是先声明后执行的语句模式;
  • defer 会在函数即将结束的时候统一执行;
  • defer 中的变量值不会被 defer 之后的语句改变。

以上关于23. Go 语言函数中的 defer的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 23. Go 语言函数中的 defer

发表回复