MST

星途 面试题库

面试题:Go defer在函数返回值场景中的应用

在Go语言中,有如下函数: ```go package main import "fmt" func test() (int) { var i int defer func() { i++ }() return i } ``` 请问该函数返回值是多少?如果将`return i`改为`i = 1; return i`,返回值又会是多少?请详细解释。
21.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 对于原始代码return i
    • 返回值是0
    • 解释:在Go语言中,return语句实际上分两步执行。第一步是计算返回值,这里return i时,i的值为0,此时返回值已经确定为0。然后执行defer语句,defer函数func() { i++ }()会将i的值加1,但是这个i值的改变不会影响已经确定的返回值。所以最终函数返回0
  2. 对于i = 1; return i
    • 返回值是1
    • 解释:首先执行i = 1,将i赋值为1。然后执行return i,这时候计算返回值,i的值为1,返回值确定为1。接着执行defer语句,defer函数func() { i++ }()会将i的值加1,同样,这个i值的改变不会影响已经确定的返回值。所以最终函数返回1