另一个问题如何使用 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 errordefer func() { if err := fo.Close(); err != nil { panic(err) }}()我想将此错误作为一个值而不是恐慌。
1 回答
慕娘9325324
TA贡献1783条经验 获得超5个赞
如果我们害怕写入没有完成close是不够的,那么更新错误仍然是不正确的。
如果您不想这样做,正确的解决方案是fsync文件:
defer(fd.Close()) // Do stuff return fd.Sync()
通过延迟或在整个函数中维护返回一个非零修改错误更容易阅读。
这将影响性能,但会捕获写入缓冲区的关闭错误和物理写入磁盘的错误。
- 1 回答
- 0 关注
- 192 浏览
添加回答
举报
0/150
提交
取消
