登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-02-17 22:12:22 418浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《在 golang 中安全地关闭文件描述符》,聊聊,我们一起来看看吧!

问题内容

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

请注意,这些示例并未检查返回的错误 fo.close()。来自 linux 手册页 close(2): 不检查返回 close() 的值是一个常见但严肃的编程 错误。以前的写入很可能出现错误(2) 操作首先在最后的 close() 中报告。不检查 关闭文件时的返回值可能会导致数据无提示丢失。 使用 nfs 和磁盘配额尤其可以观察到这一点。 ——尼克 克雷格-伍德 2013-01-25 7:12

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

// close fo on exit and check for its returned error
defer func() {
    if err := fo.Close(); err != nil {
        panic(err)
    }
}()

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


解决方案


如果我们担心写入未完成,close 还不够,所以更新错误仍然不正确。

如果您不想遇到此问题,正确的解决方案是 fsync 文件:

defer(fd.Close())
// Do stuff
return fd.Sync()

通过 defer 或在整个函数中维护来返回非零修改错误更容易阅读。

这会对性能造成影响,但会捕获写入缓冲区和物理写入磁盘的关闭错误。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《在 golang 中安全地关闭文件描述符》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>