在 golang 中安全关闭文件描述符

另一个问题如何使用 Go 读取/写入文件?在评论中安全关闭文件描述符。

请注意,这些示例并未检查 fo.Close() 的错误返回。来自 Linux 手册页 close(2):不检查 close() 的返回值是一个常见但严重的编程错误。上一次 write(2) 操作的错误很有可能在最后的 close() 中首先报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在 NFS 和磁盘配额中尤其明显。– Nick Craig-Wood 2013 年 1 月 25 日 7:12

更新帖子的解决方案使用了恐慌:

// close fo on exit and check for its returned error

defer func() {

    if err := fo.Close(); err != nil {

        panic(err)

    }

}()

我想将此错误作为一个值而不是恐慌。


郎朗坤
浏览 193回答 1
1回答

慕娘9325324

如果我们害怕写入没有完成close是不够的,那么更新错误仍然是不正确的。如果您不想这样做,正确的解决方案是fsync文件:defer(fd.Close()) // Do stuff return fd.Sync()通过延迟或在整个函数中维护返回一个非零修改错误更容易阅读。这将影响性能,但会捕获写入缓冲区的关闭错误和物理写入磁盘的错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go