我们都知道,defer
往往在函数的最后执行,遵循先进后出原则,在return
函数写入返回值后执行,而且传入的形参会立即读入,后续修改对其无影响
当一个函数执行到 return
语句时,执行顺序是:
return
后的表达式(如果有的话),将结果赋值给返回值;下面来看这三个案例
package main
import "fmt"
func Func1() int {
a := 0
defer func() {
a++
}()
return a
}
func Func2() (a int) {
a = 0
defer func() {
a++
}()
return
}
func Func3() *int {
a := new(int)
*a = 0
defer func() {
*a++
}()
return a
}
func main() {
fmt.Println(Func1())
fmt.Println(Func2())
fmt.Println(*Func3())
}
输出结果为
0 1 1
这三个究竟有什么区别呢?
案例一:
案例二:
案例三:
与案例一相似,但是传递的是指针,能修改地址中存储的值,所以返回的是1
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。