package main
import "fmt"
func f1() int {
i := 5
defer func() {
i++
}()
return i
}
func f2() *int {
i := 5
defer func() {
i++
fmt.Printf(":::%p\n", &i)
}()
fmt.Printf(":::%p\n", &i)
return &i
}
func f3() (result int) {
defer func() {
result++
}()
return 5
}
func f4() (result int) {
defer func() {
result++
}()
return result
}
func f5() (r int) {
t := 5
defer func() {
t = t + 1
}()
return t
}
func f6() (r int) {
fmt.Println(&r)
defer func(r int) {
r = r + 1
fmt.Println(&r)
}(r)
return 5
}
func f7() (r int) {
defer func( x int) {
r = x + 1
}(r)
return 5
}
func main(){
//fmt.Println(f1()) // 5 匿名函数变量不影响局部变量
// fmt.Println(f2()) // i =5, 取i的地址,进入匿名函数,i=6,取地址取的是外面的i的地址,返回i的地址,三次打印是一个地址
// fmt.Println(f3()) // return =5, result 被赋值=5;defer内result++,result=6;返回result为6
//fmt.Println(f4()) // return = result,defer内result,0+1=1,返回result为1
// fmt.Println(f5()) // return为r,先把r =t, t =5,这是r也等于5;defer内 t+1 =6,返回的是r,还是5
//fmt.Println(f6()) // return r, r=5,打印r的地址;defer内,打印机r的地址,此时是两个地址两个变量,这个匿名函数有形参,r=1;还是5
fmt.Println(f7()) // return 5,r=5;指定defer这个闭包,实参r=5,x等于0,匿名函数结束r=1。返回1,此时r没有重新定义
}
defer 函数和return混合使用的几个场景
最新推荐文章于 2024-11-07 15:19:17 发布