首页IT科技define函数是什么意思(Go 快速入门指南 – defer 函数)

define函数是什么意思(Go 快速入门指南 – defer 函数)

时间2025-06-03 15:32:57分类IT科技浏览3672
导读:概述...

概述

一个defer语句就是一个普通的函数或方法调用。defer语句保证了不论是在正常情况下 (return 返回), 还是非正常情况下 (发生错误, 程序终止),函数或方法都能够执行。

主要特性

•一个函数可定义多个defer语句

•defer表达式中的变量值在defer表达式定义时已经确定

•defer表达式可以修改函数中的命名返回值

主要作用

•简化异常处理 ( 使用defer+recover),避免异常与控制流混合在一起 (try … catch … finally)

•在defer做资源释放和配置重置等收尾工作

语法规则

如果defer函数只有一行语句,可以省略func() { ... }代码块,否则就需要用func() { ... }代码块包起来。

多个 defer 执行顺序

如果一个函数中注册了多个defer函数,这些函数会按照后进先出的顺序执行 (和栈的出栈顺序一致)。也就是最后注册的 defer 函数会第一个执行,而第一个注册的defer函数会最后执行。

例子

函数退出前打印字符

packagemain funcA(){ deferprintln("A函数执行完成") println("A函数开始执行") } funcB(){ deferprintln("B函数执行完成") println("B函数开始执行") } funcmain(){ A() B() } //$gorunmain.go //输出如下 /** A函数开始执行 A函数执行完成 B函数开始执行 B函数执行完成 */

关闭文件句柄

packagemain import( "fmt" "os" ) funccreateFile(namestring)*os.File{ file,err:=os.Create(name) iferr!=nil{ panic(err) } returnfile } funcwriteFile(file*os.File){ n,err:=file.WriteString("helloworld") iferr!=nil{ panic(err) }else{ fmt.Printf("成功写入%d个字符\n",n) } } funccloseFile(file*os.File){ err:=file.Close() iferr!=nil{ panic(err) } } funcmain(){ file:=createFile("/tmp/defer_test.txt") defercloseFile(file)//获取到文件句柄后,第一时间注册defer函数 writeFile(file) } //$gorunmain.go //输出如下 /** 成功写入11个字符 */ //$cat/tmp/defer_test.txt //输出如下 /** helloworld */

多个 defer 函数

packagemain funcA(){ deferprintln("第1个defer函数") deferfunc(){//这里为了演示func(){...}的语法 deferprintln("第2个defer函数") }() deferprintln("第3个defer函数") println("A函数开始执行") } funcmain(){ A() } //$gorunmain.go //输出如下 /** A函数开始执行 第3个defer函数 第2个defer函数 第1个defer函数 */

reference

1.Go 圣经 (https://book.douban.com/subject/27044219)

联系我

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
css块内文字居中(CSS 系列 — 块级元素靠右的实现方式) sublime怎么运行代码html(Sublime Text v4.0(4143)破解方法)