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)
}

image

posted @   我也有梦想呀  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示