package main
import"fmt"funca()string{
fmt.Println("a, 1")
fmt.Println("a, 2")return"a"}funcb()string{defer fmt.Println("b, 1")defer fmt.Println("b, 2")return"b"}funcmain(){
fmt.Println(a())// a, 1// a, 2// a
fmt.Println(b())// b, 2 // b, 1// b, 由结果可以看出函数完成之前, defer 是逆向执行的}
练习
package main
import"fmt"funcf1()int{
x :=5deferfunc(){
x++}()return x
}// 1. x = 5// 2. return x 即 return 5funcf2()(x int){deferfunc(){
x = x +1}()return5}funcf3()(y int){
x :=5deferfunc(){
x++}()return x
}funcf4()(x int){deferfunc(x int){
x++}(x)return5}funcmain(){
fmt.Println(f1())// 5
fmt.Println(f2())// 6
fmt.Println(f3())// 5
fmt.Println(f4())// 5}