- 多个defer语句的执行顺序:
在Go语言中,多个defer语句的执行顺序是后进先出(LIFO),即最后声明的defer语句最先执行。这是因为defer语句会被压入一个栈中,函数结束时从栈中弹出并执行。
- 应用场景:
- 资源清理:
例如在处理文件操作时,打开文件后需要关闭文件以释放资源。使用defer可以确保无论函数如何结束(正常返回或发生错误),文件都能被正确关闭。
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// 这里进行文件读取等操作
//...
}
- 捕获panic并处理:
可以使用defer结合recover函数来捕获并处理程序运行过程中发生的panic,避免程序直接崩溃。
package main
import (
"fmt"
)
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
panic("Simulating a panic")
}