package main
import (
"fmt"
"os"
)
func readFileContent(filePath string) (string, error) {
file, err := os.Open(filePath)
if err != nil {
return "", err
}
defer file.Close()
var content []byte
content, err = os.ReadFile(filePath)
if err != nil {
return "", err
}
return string(content), nil
}
defer语句相较于其他方式关闭文件的优势
- 简洁性:使用
defer
语句可以在打开文件后立即安排文件关闭操作,无需在函数的多个返回点处重复编写关闭文件的代码。例如,在上面的代码中,无论os.ReadFile
是否成功,defer
语句都会确保文件被关闭,而如果不使用defer
,则需要在os.ReadFile
成功和失败的返回点都手动关闭文件。
- 避免资源泄露:即使函数在执行过程中发生了异常或提前返回,
defer
语句注册的函数依然会被执行,从而保证文件资源能够被正确释放,有效避免了资源泄露的问题。如果手动关闭文件,很容易因为疏忽或者复杂的逻辑分支导致文件没有在合适的时机关闭。