go defer看到你头晕的操作

defer的执行时机

要理解defer的玩法,就要知道他的执行时机,他的执行流程是这样的:

go 语言中函数return 不是原子性的,他是分两步的
第一步 :返回值赋值
defer 执行
第二步 :真正的return 返回
函数中如果存在 defer 那么defer执行的时机是在第一步与第二步之间

看到这里,我们一起来做几个demo

接受挑战?如果你已经很熟悉defer

func f1() int {
	x := 5 
	defer func() {
		x++ 
	}()
	return x 
}

func f2() (x int) { 
	defer func() {
		x++   
	}()
	return 5 
}

func f3() (y int) { 
	x := 5 
	defer func() {
		x++ 
	}()
	return x 
}

func f4() (x int) { 
	defer func(x int) { 
		x++ 
	}(x) 
	return 5 
}

func f5() (x int)  {
	defer func (x int) int  {
		x++
		return x
	}(x)
	return 5 
}

func f6()(x int)  {
	defer func (x *int)  {
		(*x)++
	}(&x)
	return 5 
}

结语

所以,大家懂了吗 ?




不懂的话,那就看我下一篇defer的解答

上一篇:twsited中的同步代码使用


下一篇:js延迟(异步)加载的6种方式