面试题答案
一键面试defer语句的作用
在Go语言中,defer
语句用于注册一个延迟执行的函数。这个函数会在包含defer
语句的函数即将返回时执行,无论该函数是正常返回还是因为发生了恐慌(panic)而异常返回。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() // 注册延迟关闭文件操作
// 这里进行文件读取等操作
data := make([]byte, 1024)
n, err := file.Read(data)
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println("Read", n, "bytes:", string(data[:n]))
}
在上述代码中,defer file.Close()
确保了无论文件读取操作是否成功,在main
函数结束时,文件句柄file
都会被正确关闭,避免了文件资源的泄露。如果没有defer
语句,当读取文件发生错误提前返回时,文件可能不会被关闭。