MST
星途 面试题库

面试题:Go中defer与匿名函数的执行顺序及变量作用域问题

下面这段Go代码输出什么?请详细解释原因。 ```go package main import "fmt" func main() { i := 0 defer func() { fmt.Println(i) }() i++ } ```
25.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果: 1
  2. 原因解释
    • 在Go语言中,defer语句会延迟函数的执行,直到包含该defer语句的函数返回。
    • 这里defer后面跟着一个匿名函数func() { fmt.Println(i) }
    • 虽然defer语句在i++之前,但defer语句中的函数不会立即执行。
    • 先执行i++,此时i的值变为1。
    • main函数执行完毕准备返回时,才会执行defer后面的匿名函数,此时i的值已经是1,所以输出1。