Go defer 栈 - go 训练营

defer 的作用就是把关键字之后的函数执行压入一个栈中延迟执行,多个 defer 的执行顺序是后进先出 LIFO : defer func() { fmt.Println("1") }() defer func() { fmt.Println("2") }() defer func() { fmt.Println("3") }() 输出顺序是 321。 这个特性可以对一个 array 实现逆序操作。 被 deferred 函数的参数在 defer 时确定,这是 defer 的特点,一个函数被 defer 时,它的参数在 defer 时进行计算确定,即使 defer 之后参数发生修改,对已经 defer 的函数没有影响,如下: func a() { i := 0 defer fmt.Println(i) i++ return } a 执行输出的是 0 而不是 1,因为 defer 时,i 的值是 0,此时被 defer 的函数参数已经进行执行计算并确定了。
欢迎参加 Go 训练营挑战,这些挑战将帮助你逐步掌握 Go 开发。Go(又称Golang)是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。在 2016 年,Go 被软件评价公司 TIOBE 选为“TIOBE 2016年最佳语言”。