面试题答案
一键面试- 函数当前形式的返回值及
defer
语句与返回值的交互:- 返回值:该函数的返回值是2。
defer
语句与返回值的交互解释:- 在Go语言中,
return
语句并不是原子操作。它实际上分为两步:第一步是给返回值赋值(如果有具名返回值,这里就直接赋值;如果是匿名返回值,会先创建一个临时变量来存储返回值);第二步是执行defer
语句,最后才是真正返回。 - 在这个函数中,
result
是具名返回值。当执行到return 1
时,首先将result
赋值为1,然后执行defer
语句,defer
语句中的result++
使得result
的值变为2,最后函数返回result
的值,所以返回值是2。
- 在Go语言中,
- 将
return 1
改为result = 1; return
后的返回值及原因:- 返回值:返回值依然是2。
- 原因:
- 这里
result = 1
先将具名返回值result
赋值为1,然后执行return
,在执行return
前会执行defer
语句。defer
语句中的result++
会将result
的值从1增加到2,最后函数返回result
的值,所以返回值还是2。本质上和第一种情况类似,都是defer
语句在return
真正返回前对具名返回值result
进行了修改。
- 这里