1. defer函数或方法
一个函数或方法的执行被延迟了
2. defer的用法:
- 对象.close(),临时文件的删除。。。
文件.open()
defer close()
读或写 - go语言中关于异常的处理,使用panic()和recover()
panic函数用于引发恐慌,导致程序中断执行
recover函数用于恢复程序的执行,recover()语法上要求必须在defer中执行 - 多个defer
多个defer时,弹栈处理
package main
import "fmt"
func main() {
defer fun1("hello")
fmt.Println("12345")
defer fun1("world")
fmt.Println("王二狗")
}
func fun1(s string) {
fmt.Println(s)
}
//结果
12345
王二狗
world
hello
- defer函数传递参数的时候:
defer函数调用时,就已经传递参数数据了,只是暂时不执行函数中的代码而已
package main
import "fmt"
func main() {
a := 2
fmt.Println(a)
defer fun2(a)
a++
fmt.Println(a)
}
func fun2(a int) {
fmt.Println("fun2()函数中打印a: ",a)
}
func fun1(s string) {
fmt.Println(s)
}
//结果
主函数中的a: 2
主函数中的a: 3
fun2()函数中打印a: 2
- defer 函数注意点
当外围函数中的语句正常执行完毕时,只有其中所有的延迟函数都执行完毕,外围函数才会真正的结束执行。
当执行外围函数中的return语句时,只有其中所有的延迟函数都执行完毕后,外围函数才会真正返回,当外围函数中的代码引发运行恐慌时,只有其中所有的延迟函数都执行完毕后,该运行时恐慌才会真正被扩展至调用函数
package main
import "fmt"
func main() {
//defer fun1("hello")
//fmt.Println("12345")
//defer fun1("world")
//fmt.Println("王二狗")
a := 2
fmt.Println("主函数中的a: ",a)
defer fun2(a)
a++
fmt.Println("主函数中的a:", a)
fmt.Println(fun3())
}
func fun3() int{
fmt.Println("fun3()函数的执行。。。")
defer fun1("哈哈")
return 0
}
func fun2(a int) {
fmt.Println("fun2()函数中打印a: ",a)
}
func fun1(s string) {
fmt.Println(s)
}
//结果
主函数中的a: 2
主函数中的a: 3
fun3()函数的执行。。。
哈哈
0
fun2()函数中打印a: 2
```--++
网友评论