面试题答案
一键面试defer语句的执行时机
在Go语言中,defer
语句会延迟函数的执行,直到包含该defer
语句的函数执行结束时才会执行。这里的“函数执行结束”包括:
- 正常返回时,在返回语句执行后,函数退出前执行
defer
语句。 - 发生恐慌(panic)时,会先按照后进先出(LIFO)的顺序执行
defer
语句,然后再进行恐慌处理流程。
文件读取并处理场景下利用defer进行资源管理优化性能
在文件读取并处理的场景中,使用defer
可以确保文件在使用完毕后及时关闭,即使在处理过程中发生错误也能正确关闭文件,避免资源泄漏。以下是相关代码示例:
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// 这里进行文件的读取和处理操作
// 例如读取文件内容
var content []byte
content, err = os.ReadFile("example.txt")
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println("File content:", string(content))
}
在上述代码中,通过os.Open
打开文件后,立即使用defer file.Close()
来确保在函数结束时(无论是正常结束还是因错误提前返回),文件都会被关闭,从而优化资源管理和性能。