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的更多相关文章
随机推荐
- Selenium3+python自动化011-unittest生成测试报告(HTMLTestRunner)
批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTest ...
- RabbitMQ+PHP教程
RabbitMQ+PHP 教程一(Hello World) RabbitMQ+PHP 教程二(Work Queues) RabbitMQ+PHP 教程三(Publish/Subscribe) Rabb ...
- IIS添加网站
打开IIS 在网站上面点击右键进行添加网站 进入添加网站配置
- 04 部署uwsgi web服务器
1 建立uwsgi软链接 进入虚拟环境,并在虚拟环境中安装uwsgi,建立软链接. $ cd /venv/thvenv/bin $ activate $ pip install uwsgi 2 创建u ...
- python接口自动化测试之根据excel中的期望结果是否存在于请求返回的响应值中来判断用例是否执行成功
1.首先在excel中填写好预期结果的值 这里判断接口成功的依据是预期结果值是否存在于接口的返回数据中. 一般接口的返回值都是json对象,我们需要将json对象转换为json格式的字符串 如下图,进 ...
- 1052 Linked List Sorting (25分)
题目 1. 思路 使用map存放所有的地址对 使用起始地址遍历map,结果存放在vector中 排序vector 输出vector 2. 注意点 开始的时候起始地址为-1 可能有些节点没有用到,注意排 ...
- tensorflow-gpu安装
添加清华源(输入清华仓库镜像),可以提高下载速度: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/ ...
- Python调用libsvm
# -*- coding: utf-8 -*- import os, sys path = r"D:\Program Files (x86)\libsvm-3.22\python" ...
- SharePoint资料
链接:https://pan.baidu.com/s/1QOSShE02LYKXFtoJ58WCQQ 提取码:dnhs 复制这段内容后打开百度网盘手机App,操作更方便哦 SharePoint 200 ...
- 解决pycharm创建github工程但push失败的问题
1.运行git-cmd.exe; 2.d: cd 工程路径 3.执行命令:git remote set-url origin https://github.com/wawj901124/jmet ...