MST

星途 面试题库

面试题:Go中defer在函数返回值场景下的执行

在Go语言中,考虑下面这个函数,分析返回值是多少以及defer的执行过程。 ```go package main import "fmt" func test() int { var a int = 1 defer func() { a = a + 1 }() return a } ```
30.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 返回值
    • 函数test的返回值是1
  2. defer执行过程
    • 当执行到return a语句时,Go语言会先计算返回值,此时a的值为1,所以返回值会被暂存为1
    • 然后执行defer语句,defer函数func() { a = a + 1 }()被调用,此时a的值变为2
    • 但是返回值已经在执行return语句时被暂存为1,所以最终函数返回1,而不是2

总结:函数test返回1defer函数在return语句计算返回值之后执行,修改了局部变量a的值,但不影响已经确定的返回值。