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 @ 2023-05-11 22:48  我也有梦想呀  阅读(32)  评论(0)    收藏  举报