案例
首先,我们看一个拷贝文件函数的示例。
func CopyFile(srcName, dstName string) error {
src, err := os.Open(srcName) //①
if err != nil {
return err
}
stat, err := src.Stat()
if err != nil {
src.Close() //注意关闭1
return err
}
if stat.IsDir() { //②
src.Close() //注意关闭2
return fmt.Errorf("file %q is a directory", srcName)
}
dst, err := os.Create(dstName) //③
if err != nil {
src.Close() //注意关闭3
return err
}
_, err = io.Copy(dst, src) //④
if err != nil {
src.Close() //注意关闭4
dst.Close() //注意关闭5
return err
}
err = dst.Sync() //⑤
src.Close() //注意关闭6
dst.Close() //注意关闭7
return err
}
① 打开源文件
② 检查是否是目录
③ 创建目标文件
④ 拷贝源文件到目标文件
⑤ 刷新文件系统缓冲区
我们需要管理该文件描述符的关闭,因为一个