Go面试题更新 2026-08-05

在 Go 语言里,defer 语句的用法是怎样的?请说明其典型应用场景。

技术原理Go

考察说明

考查对 Go 语言 defer 语句基本用法和特性的理解。

回答思路

  1. 【回答框架 1】defer 语句用于延迟执行一个函数调用,该调用会在所在函数返回之前执行,无论函数是正常返回还是发生 panic。多个 defer 语句按后进先出(LIFO)的顺序执行。
  2. 【回答框架 2】典型应用场景包括资源释放(如关闭文件、解锁互斥锁、关闭数据库连接),确保即使发生错误或 panic 也能执行清理操作。
  3. 【回答框架 3】defer 语句的参数在声明时求值,而不是在调用时求值,这可能导致一些容易误解的行为。
  4. 【回答框架 4】defer 还可以用于在函数返回前修改命名返回值,但需要注意执行时机和返回值的影响。
  5. 【关键点 1】defer 确保函数返回前执行,常用于资源清理。
  6. 【关键点 2】多个 defer 按 LIFO 顺序执行。
  7. 【关键点 3】defer 参数在声明时求值。
  8. 【易错点 1】在循环中使用 defer 可能导致资源堆积,应避免在循环内使用 defer 进行资源清理。
  9. 【易错点 2】对 defer 中函数的返回值无法直接控制,除非使用命名返回值。