面试题答案
一键面试- 函数返回值为2的原因:
- 在Go语言中,
return
语句并不是原子操作。当执行到return 1
时,会先将返回值1赋值给命名返回值result
,此时result
的值为1。 - 然后,函数会执行
defer
语句中的代码,这里defer
语句中的result++
会对result
进行自增操作,result
的值变为2。 - 最后,函数返回
result
的值,所以最终返回值是2。
- 在Go语言中,
- defer在函数返回值处理过程中的作用机制:
- 注册阶段:当函数执行到
defer
语句时,会将defer
后面的函数(这里是func() {result++}
)压入一个栈中。这个栈是为当前函数调用专门维护的,用于存储所有defer
函数。 - 执行阶段:在函数返回前(准确地说,是在函数的返回值确定之后但真正返回之前),会按照后进先出(LIFO,Last In First Out)的顺序依次执行
defer
栈中的函数。在这个例子中,当return 1
执行后,result
已经被赋值为1,然后执行defer
中的result++
,修改了result
的值,最终函数返回修改后的result
值。如果有多个defer
函数,它们会按照与注册相反的顺序执行。
- 注册阶段:当函数执行到