Go中关键字defer浅析

标签: go
0人阅读 评论(0) 收藏 举报
分类:

defer是go中非常好用的关键字,它们都是在程序即将结束时执行,可以用来执行一些关闭文件的操作,并且按照声明时的逆序进行执行

1、defer的调用顺序与它的声明顺序相反

func main() {
   for i := 0; i < 4; i++ {
      defer fmt.Println(i)
   }
}

输入结果为:

3

2

1

0

2、defer中参数的值为当其声明时参数的值

func main() {
   i := 0
   defer fmt.Println(i)
   i++
   return
}

在defer声明的时候i为1

所以输出结果为:

1

3、defer还可以对返回值进行修改

func main() {
   fmt.Println(c())
}
func c() (i int) {
   defer func() { i++ }()
   return 2
}

输出结果为:

3

查看评论

Go语言中的defer关键字

官方文档中关于defer语句的解释: defer语句延迟执行一个函数,该函数被推迟到当包含它的程序返回时(包含它的函数 执行了return语句/运行到函数结尾自动返回/对应的goroutine p...
  • qwertyupoiuytr
  • qwertyupoiuytr
  • 2017-02-15 21:34:44
  • 746

关于Go语言中defer关键字

在Go语言中,defer语句会在该函数结束的时候被调用,即使后面的语句运行时出现异常了defer语句仍然会被执行。 需要注意的是,如果defer语句中引用了参数,则该参数的值将是程序到defer这一...
  • books1958
  • books1958
  • 2014-02-27 17:34:56
  • 1365

Go语言defer的使用

转载:http://cloudnil.com/2014/05/19/defer-in-go/ Go语言中没有类似于java中的try…catch…finally的语句块,但是却有一个非常优雅...
  • yugongpeng_blog
  • yugongpeng_blog
  • 2015-04-14 12:04:33
  • 921

Go实战--golang中defer的使用(有事没事defer一下)

生命不止,继续 go go go !!!学习golang这么久了,还没看到类似传统的 try…catch…finally 这种异常捕捉方式。 但是,Go中引入的Exception处理:defer, ...
  • wangshubo1989
  • wangshubo1989
  • 2017-07-04 21:28:33
  • 3143

Golang中defer、return、返回值之间执行顺序的坑

Go语言中延迟函数defer充当着 cry...catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序,从而掉进坑中,...
  • txj236
  • txj236
  • 2016-06-23 17:27:09
  • 2776

浅析SQL 中GO关键字的作用

如果只是执行一条语句,有没有GO都一样 如果多条语句之间用GO分隔开就不一样了 每个被GO分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。 例如: 首先同时执行下边的语句 ...
  • Mary19920410
  • Mary19920410
  • 2017-08-18 22:53:35
  • 597

go语言defer使用

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

go语言defer执行时机简单分析

go语言defer执行时机简单分析
  • htyu_0203_39
  • htyu_0203_39
  • 2016-03-26 14:13:32
  • 1264

Golang有多个defer的情况

有多个defer时,return后先运行最后定义的defer,后进先出,栈的运行顺序 package main   import "fmt" import "log" fun...
  • muscledex
  • muscledex
  • 2017-05-04 21:59:37
  • 466

Go编程基础—defer、return、返回值之间执行顺序的坑

Golang中defer、return、返回值之间执行顺序的坑Go语言中延迟函数defer充当着 cry…catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白de...
  • qq_22063697
  • qq_22063697
  • 2017-07-09 16:37:07
  • 603
    个人资料
    等级:
    访问量: 152
    积分: 61
    排名: 234万+
    文章分类
    文章存档