看看下面几个函数返回结果都是什么:

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开始执行一些收尾工作;最后函数携带当前返回值退出。

不要没事返回指针回去