go defer看到你头晕的操作

Posted issac-fan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的解答

以上是关于go defer看到你头晕的操作的主要内容,如果未能解决你的问题,请参考以下文章

你知道的Go切片扩容机制可能是错的

go语言笔记——调试还很弱,用gdb来做?可用panic和defer。格式化代码使用gofmt,貌似我的vim插件是自带

go defer,panic,recover详解 go 的异常处理

你真的了解 defer 吗?

Go语言中defer的一些坑

Go defer