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的更多相关文章

随机推荐

  1. 多项式对数函数 - NTT

    #include <bits/stdc++.h> using namespace std; #define int long long const int N=4000005; // 4 ...

  2. django实现简易登录注册

    经过一些文档的理解,以及一些时间的琢磨.我觉得可以用django做一些小项目了 先说说登录功能吧. 先创建一个app,用admin命令 在cmd打开到manage.py同级目录下,django-adm ...

  3. C/C++ Windows API——获取系统指定目录(转)

    原文地址:C/C++ Windows API——获取系统指定目录 经测试,在win10 VS2017中用wprintf()输出正常,SHGetSpecialFolderPath函数也正常运行 但是用M ...

  4. javacv FFmpeg 视频压缩

    package com.nmcc.demo.utils; import lombok.extern.slf4j.Slf4j; import org.bytedeco.javacpp.avcodec; ...

  5. Java修饰符类型

    转自原文:http://www.yiibai.com/java/java_modifier_types.html 修饰符是添加到这些定义来改变它们的含义的关键词. Java语言有各种各样修饰词,其中包 ...

  6. INEQUALITY BOOKS

    来源:这里 Bất Đẳng Thức Luôn Có Một Sức Cuốn Hút Kinh Khủng, Một Số tài Liệu và Sách Bổ ích Cho Việc Học ...

  7. 用Object.prototype.toString.call(obj)检测对象类型原因分析

    用Object.prototype.toString.call(obj)检测对象类型原因分析  更新时间:2018年10月11日 08:46:33   投稿:laozhang    我要评论   在本 ...

  8. 计蒜客 - A1633.蒜头君的数轴

    我感觉出的很好的一道题,首先不难想到(其实我刚开始没想到),加点的个数就是找已有点两两形成区间的gcd,那么问题就出在了复杂度上,每次循环哪个区间不要复杂度过高,所以运用正反两次前缀和(?好像不能这么 ...

  9. 虚拟路径引起的bug

    之前,遇到一个问题,就是,项目访问不了最新产生的pdf文件. 百思不得其解,为什么,返回 idea 页面就可以访问了(真的只是返回 idea 页面,不进行其他什么的操作).一直以为是热部署的问题 后来 ...

  10. 安装python3并新建python3的虚拟环境

    安装依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel -y 下载P ...