18、defer
1.defer是什么?
字面意思来看,defer是延迟,推迟的意思
在go语言中,使用defer关键字来延迟一个函数或者方法的执行
2.defer能干嘛?
-
对象.close(),临时文件的删除
文件.open()
defer close()
读或写 -
go语言中关于异常的处理,使用panic()和recover()
panic()函数用于引发恐慌,导致程序中断执行
recover()函数用户恢复程序的执行,recover()语法上要求必须在defer中执行
注意:荡有多个defer修饰的函数时,遵循先进后出的规则;类似于栈的结构
3.defer在函数传递传递参数的时候
defer函数调用时,就已经传递了参数数据了,只是暂时不执行函数中的代码而已
4.defer函数的注意点
defer函数:
当外围函数中的语句正常执行完毕时,只有其中所有的延迟函数都执行完毕,外围函数才会真正的结束执行。
当执行外围函数中的return语句时,只有其中所有的延迟函数都执行完毕后,外围函数才会真正返回当外围函数中的代码引发运行恐慌时,只有其中所有的延迟函数都执行完毕后,该运行时恐慌才会真正被扩展至调用函数。
/**
* @author ly (个人博客:https://www.cnblogs.com/qbbit)
* @date 2023/5/11 22:34
* @tags 喜欢就去努力的争取
*/
package main
import "fmt"
func main() {
// defer
defer funDefer("hello")
fmt.Println("111111")
defer funDefer("world") // 被延迟了,在外层函数执行完,才来执行
fmt.Println("ly~~~~")
fmt.Println("=================")
a := 2
fmt.Println("defer之前:", a)
defer funDefer2(a)
a++
fmt.Println("defer之后:", a)
fmt.Println("=================")
fmt.Println(funDefer3())
}
func funDefer3() int {
fmt.Println("funDefer3")
defer funDefer2(100)
return 1
}
func funDefer2(a int) {
fmt.Println("funDefer2:", a)
}
func funDefer(s string) {
fmt.Println(s)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构