Go_defer
package main import "fmt" func main() { //外围函数
/*
defer的词义:"延迟","推迟"
在go语言中,使用defer关键字来延迟一个函数或者方法的执行。 1.defer函数或方法:一个函数或方法的执行被延迟了。 2.defer的用法:
A:对象.close(),临时文件的删除。。。
文件.open()
defer close()
读或写 B:go语言中关于异常的处理,使用panic()和recover()
panic函数用于引发恐慌,导致程序中断执行
defer一定要在可能引发panic的语句之前定义,否则就不会被加载到栈中
recover函数用于恢复程序的执行,recover()语法上要求必须在defer中执行 3.如果多个defer函数:
放到一个栈中,先进后出。
先延迟的后执行,后延迟的先执行。 4.defer函数传递参数的时候:defer函数调用时,就已经传递了参数数据了,只是暂时不执行函数中的代码而已。 5.defer函数注意点: 当外围函数中的语句正常执行完毕时,只有其中所有的延迟函数都执行完毕,外围函数才会真正的结束执行。
当执行外围函数中的return语句时,只有其中所有的延迟函数都执行完毕后,外围函数才会真正返回。
当外围函数中的代码引发运行恐慌时,只有其中所有的延迟函数都执行完毕后,该运行时恐慌才会真正被扩展至调用函数。 */
//defer fun1("hello") //也被延迟了
//fmt.Println("12345")
//defer fun1("world") //被延迟了
//fmt.Println("王二狗") a := 2
fmt.Println(a) //2
defer fun2(a)
a++
fmt.Println("main中:", a) //3 fmt.Println(fun3())
} func fun1(s string) {
fmt.Println(s)
} func fun2(a int) { // a = 2
fmt.Println("fun2()函数中打印a:", a) //2,表示已经传递了参数数据了,只是暂时不执行函数中的代码而已
} func fun3() int {
fmt.Println("fun3()函数的执行。。。")
defer fun1("haha")
return 0
}
package main import "fmt" //defer面试题
func calc(index string, a, b int) int {
ret := a + b
fmt.Println(index, a, b, ret)
return ret
} func main() {
x := 1
y := 2
//defer的时候参数已经传进去了
defer calc("AA", x, calc("A", x, y)) //calc是立即执行的
x = 10
defer calc("BB", x, calc("B", x, y))
y = 20
}
/*
A 1 2 3
B 10 2 12
BB 10 12 22
AA 1 3 4
*/
Go_defer的更多相关文章
随机推荐
- Jenkins +Ant +Jmeter(apache-jmeter-5.1.1)自动化性能测试平台
1.安装配置好Jdk, 下载网址:https://www.cr173.com/soft/33894.html 2.Jmeter下载地址:http://jmeter.apache.org/downloa ...
- redis分布式锁在springboot中的实现
理论知识 redis分布式锁的实现方案请参考文章 如何优雅地用redis实现分布式锁 本案例简介 以秒杀活动为例子,在多线程高并发的情况下需要保证秒杀业务的线程安全性,确保秒杀记录与所扣库存数 ...
- 前端Css学习
CSS 称为层叠样式表 css样式引入方式 第一种 head标签中引入 <style> /* 选择器{css属性名称:属性值;css属性名称:属性值;} */ div{ /* css注释 ...
- BUUCTF [SUCTF 2019]EasySQL
首先打开网址 发现有三种显示方法 还有一个没有输出 可以堆叠注入 1;show databases; 1;show tables; 可以看到有一个Flag表 测试发现from flag都被过滤不能直接 ...
- AcWing 1010. 拦截导弹
//贪心加dp #include<iostream> using namespace std ; ; int n; int q[N]; int f[N]; int g[N];//存每个序列 ...
- 洛谷P1093 奖学金
https://www.luogu.org/problem/P1093 #include <bits/stdc++.h> using namespace std; struct Node{ ...
- g++运行c++程序提示main()找不到
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20) ...
- Intellij IDEA 控制台中文乱码问题
如果Intellij IDEA 控制台出现中文乱码: 1.修改Intellij IDEA 配置文件: 在安装目录的bin文件夹里找到 idea.exe.vmoptions 和 idea64.exe.v ...
- IntelliJ IDEA 2017.3尚硅谷-----配置 Maven
- util之Stack
定义 Stack<Integer>s = new Stack<>(); boolean isEmpty() 测试堆栈是否为空. Object peek( ) 查看堆栈顶部的对 ...