看看下面几个函数返回结果都是什么:
package main
import "fmt"
func f0() (int) {
var r int
defer func() {
r++
}()
return r
}
func f1() (r int) {
defer func() {
r++
}()
return 0
}
func f2() (r int) {
t := 5
defer func() {
t = t + 5
// fmt.Println("r is:",r) // 5
}()
return t
}
func f3() (r int) {
defer func(r int) {
r = r + 5
}(r)
return 1
}
func f4() (*int) {
var r int
defer func() {
r = r + 5
}()
return &r
}
func main() {
fmt.Println("f0 return:",f0())
fmt.Println("f1 return:",f1())
fmt.Println("f2 return:",f2())
fmt.Println("f3 return:",f3())
fmt.Println("f4 return:",*f4())
}
返回步骤:
1.多个defer的执行顺序为“后进先出”;
2.defer、return、返回值三者的执行逻辑应该是:return最先执行,return负责将结果写入返回值中;接着defer开始执行一些收尾工作;最后函数携带当前返回值退出。
不要没事返回指针回去