MST

星途 面试题库

面试题:Go语言defer语句在函数返回值场景下的作用

考虑以下Go语言代码: ```go package main import "fmt" func test() (result int) { result = 1 defer func() { result++ }() return result } ``` 请问`test`函数的返回值是多少?请详细分析defer语句在此处是如何影响返回值的。
30.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. test函数的返回值
    • test函数的返回值是2
  2. defer语句影响返回值的详细分析
    • 在Go语言中,defer语句会延迟函数的执行,直到外层函数返回。
    • 当执行到return result语句时,会先将result的值(此时为1)作为返回值暂存起来,这个返回值的暂存过程可以理解为给函数返回值分配了一个“返回槽”。
    • 然后defer语句中的函数会被执行,在这个例子中,defer中的result++会使result的值变为2
    • 最后函数实际返回的值是之前暂存的“返回槽”中的值。但在Go语言的命名返回值(result是命名返回值)情况下,defer语句对命名返回值的修改会影响最终的返回结果。所以最终返回的值是2,因为defer语句修改了命名返回值result,而返回的就是这个被修改后的result