第一个例子:
package mainimport ("fmt")func main() {fmt.Println(a())}func a() (res int) {defer func() {res ++}()return res}
上面这个例子打印结果是1,那是因为return在defer前执行,当执行到defer时,返回值res会自增一次,所有最后整个函数返回的就是1
第二个例子:
package mainimport ("fmt")func main() {i := 0defer fmt.Println(i)i++return}
第二个例子是为0,那是因为在defer执行前,就已经将i的值得到了,相当于是一个快照,所以,即使return的结果是1,但defer的值始终是之前的i := 0
