MST

星途 面试题库

面试题:Go的defer与函数返回值

在Go语言中有如下函数: ```go func test() int { var i int defer func() { i++ }() return i } ``` 请说明函数test的返回值是多少,结合defer的执行机制阐述返回值产生的过程。
11.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 返回值
    • 函数test的返回值是0
  2. defer执行机制及返回值产生过程
    • 在Go语言中,defer语句会将其后面跟随的函数延迟到包含该defer语句的函数即将返回时执行。
    • 当执行到return i时,Go语言会先计算返回值,这里返回值会被暂存,此时i的值为0,所以暂存的返回值为0
    • 然后,按照defer的执行机制,会执行defer后面的匿名函数func() { i++ },此时i的值变为1
    • 最后,函数返回之前暂存的返回值0,而不是修改后的i的值1。所以函数test最终返回0