首页 > 其他 > 详细

go特性-defer

时间:2020-11-27 19:24:29      阅读:35      评论:0      收藏:0      [点我收藏+]

defer准则:
1:后定义的defer先执行(可以理解为栈的方式)
2:defer定义的函数的参数,在定义的时候已经被赋值了
3:defer函数可以修改具名返回值,但不会修改匿名返回值
4:遇到panic的时候,当前协程调用栈已定义的defer将被执行,如果当前协程没有任何一个defer函数内执行了recover,那么将退出进程

例1,如下代码会输出什么?


import "testing"
import "fmt"

func sum(tip string, a int, b int) int {
	sum := a + b
	fmt.Printf("tip=%s a=%d b=%d sum=%d\n", tip, a, b, sum)
	return sum
}

func deferSum() {
	a := 1
	b := 2
	defer sum("1tip", a, sum("2tip", a, b))
	a = 3
	defer func(b int) {
		sum("3tip", a, sum("4tip", a, b))
	}(a)
	b = 4
	defer func() {
		sum("5tip", a, sum("6tip", a, b))
	}()
}

func TestDeferSum(t *testing.T) {
	deferSum()
}

正确答案如下:

tip=6tip a=3 b=4 sum=7
tip=5tip a=3 b=7 sum=10
tip=4tip a=3 b=3 sum=6
tip=3tip a=3 b=6 sum=9
tip=1tip a=1 b=3 sum=4

go特性-defer

原文:https://www.cnblogs.com/fitness/p/14046592.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!