Go 基础面试题, Go 语言中 defer 的执行顺序是什么?
Go 基础面试题, Go 语言中 defer 的执行顺序是什么?
QA
Step 1
Q:: Go 语言中 defer 的执行顺序是什么?
A:: 在 Go 语言中,defer 语句会将函数调用推迟到包含 defer 的函数执行完毕后才执行。defer 调用是按照先进后出的顺序执行的(LIFO),也就是说,最后一个 defer 的语句会最先执行,而第一个 defer 的语句会最后执行。这一特性在资源清理、文件关闭、锁的释放等场景中非常有用。
Step 2
Q:: defer 语句的使用场景有哪些?
A:: defer 语句主要用于确保特定的清理操作(如关闭文件、释放锁、清理内存等)在函数结束时执行,而不论函数是正常返回还是由于 panic 终止。它通常用于资源管理、异常处理和日志记录中。例如,打开文件后可以使用 defer 语句确保文件关闭,即使中途出现错误也不会遗漏。
Step 3
Q:: defer 与 return 的执行顺序是怎样的?
A:: 在 Go 语言中,当函数执行到 return 语句时,首先计算返回值,但函数并不会立即返回,而是会执行所有的 defer 语句,然后才返回调用者。也就是说,defer 的执行发生在 return 语句计算之后,函数真正返回之前。
Step 4
Q:: 在 defer 中修改返回值是否可行?
A:: 可以。由于 defer 语句在 return 语句之后执行,因此可以在 defer 中修改命名返回值(named return values)。通过修改这些返回值,可以在函数退出之前更改返回的结果。需要注意的是,修改无命名返回值则无法生效。
用途
defer 语句是 Go 语言中用于资源管理和异常处理的一个关键特性。在实际生产环境中,defer 语句常用于确保资源(如文件、数据库连接等)在使用完毕后正确关闭。这可以防止资源泄漏问题,并确保代码的健壮性和可维护性。此外,defer 在处理 panic 时也非常有用,它允许在异常发生时进行资源清理、日志记录等操作,确保系统的稳定性和可靠性。\n相关问题
🦆
Go 语言中的 panic 和 recover 是什么?▷
🦆
Go 语言中的 error 接口有什么作用?▷
🦆
在 Go 中如何正确关闭 Goroutine?▷
🦆
Go 语言中的 Mutex 是什么?▷
🦆
Go 中的 select 语句有什么作用?▷