defer延迟调用:

1、确保调用在函数结束时发生;

2、defer列表为先进后出;

3、通常在Open/Close  Lock/Unlock中使用。

defer调用顺序示例:

package main

import (
"fmt"
) func deferType() {
defer fmt.Println("defer 01")
defer fmt.Println("defer 02")
fmt.Println("hello defer")
defer fmt.Println("defer 03")
panic("hello panic")
defer fmt.Println("defer 04") // panic后的defer不会被执行
} func main() {
deferType()
} 输出结果: hello defer
panic: hello panic
defer 03
defer 02
defer 01 goroutine 1 [running]:
main.deferType()
/Users/shongbing/go/src/imooc/errhanding/defer/defer.go:15 +0x19b
main.main()
/Users/shongbing/go/src/imooc/errhanding/defer/defer.go:35 +0x22

defer 关闭文件

package main

import (
"os"
"bufio"
"fmt"
) func Fibonacci() func() int {
// 斐波那契数列,返回一个intGen类型
a, b := 0, 1
return func() int {
a, b = b, a + b
return a
}
} func writeFile(filename string) {
file, err := os.Create(filename)
if err != nil {
panic(err)
}
defer file.Close() writer := bufio.NewWriter(file)
defer writer.Flush()
f := Fibonacci()
for i:=0; i<20; i++ {
fmt.Fprintln(writer, f())
}
} func main() {
writeFile("fib.txt")
}

Go 语言defer用法的更多相关文章

  1. GO语言延迟函数defer用法分析

    这篇文章主要介绍了GO语言延迟函数defer用法,较为详细的分析了GO语言的特性与具体用法,并给出了一个比较典型的应用实例,具有一定的参考借鉴价值,需要的朋友可以参考下   本文实例讲述了GO语言延迟 ...

  2. go语言 defer 高级

    go语言defer语句的用法 defer的语法 defer后面必须是函数调用语句,不能是其他语句,否则编译器会出错. package main import "log" func ...

  3. 标准SQL语言的用法

    原文链接:http://www.ifyao.com/2015/05/18/%E6%A0%87%E5%87%86%E7%9A%84sql%E8%AF%AD%E8%A8%80%E4%BD%BF%E7%94 ...

  4. 【转】话说C语言const用法

    原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修 ...

  5. go语言---defer

    go语言---defer https://blog.csdn.net/cyk2396/article/details/78885135 defer 是在函数退出前调用,多个defer遵循 先进后出 的 ...

  6. go语言defer panic recover用法总结

    defer defer是go提供的一种资源处理的方式.defer的用法遵循3个原则 在defer表达式被运算的同时,defer函数的参数也会被运算.如下defer的表达式println运算的同时,其入 ...

  7. go语言defer关键字背后的实现,语法,用法

    原文: https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html ------------------------------ ...

  8. 【三支火把】---C语言const用法总结

    C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...

  9. go语言defer使用

    defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句.当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回.特别是当你在进行一些打开资源 ...

随机推荐

  1. EasyUI怎么利用onBeforeRender事件

    onBeforeRender事件是view的属性,该事件发生在把ajax请求到的数据填充到表格内容中之前 将此段代码附加在DataGrid初始化后执行,即可完成在DataGrid渲染之前进行操作 // ...

  2. jconsole监控JVM

    1.查找catalina.sh,使用tomcat中的catalina.sh 目录地址/opt/apache-tomcat-7.0.82/bin 2.配置JAVA_OPTS JAVA_OPTS=&quo ...

  3. 导出大量数据到excel表

    set_time_limit(0);error_reporting(0); // 输出Excel文件头,可把user.csv换成你要的文件名header('Content-Type: applicat ...

  4. 用训练好的caffemodel对单个/批量图片进行分类

    一.单个图片进行分类 这个比较简单,在*.bat文件中输入以下代码: @echo off set BIN_DIR=D:\caffe\caffe-windows\Build\x64\Release se ...

  5. js判断选择的时间是否大于今天

    获取的时间格式为  2012-5-28var thetime = document.getElementById("clearDate").value;var   d=new   ...

  6. 将DataTable转换成Json格式

    方法一: 将DataTable数据拼接成json字符串,方法如下: ///<summary> /// dataTable转换成Json格式 ///</summary> ///& ...

  7. maven仓库添加本地jar

    一.将jar添加到本地仓库的做法: 以下面pom.xml依赖的jar包为例: 实际项目中pom.xml依赖写法: <dependency> <groupId>org.sprin ...

  8. js引入方式的弹框方法2

    html代码: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv=& ...

  9. iOS 关于自定义UICollectionViewLayout实现复杂布局

    UICollectionView的简单介绍 UICollectionView的结构 Cells Supplementary Views 追加视图 (类似Header或者Footer) Decorati ...

  10. Oracle DBA的学习(笔记)

    1.软件任务分组:系统分析师.系统设计师.程序员.测试人员.开发dba.系统架构师.实施人员. 2.常用设计图:活动图.用例图.类图.序列图. 2010-9-15(dba学习) 1.1 Oracle产 ...