另一个问题如何使用Go读写文件?在评论中谈到了安全关闭文件描述符的问题。
更新后的解决方案使用了panic:请注意,这些示例没有检查fo.Close()的错误返回。从Linux手册close(2)中可以看出:不检查close()的返回值是一种常见但严重的编程错误。先前write(2)操作的错误可能首先在最终close()时报告。关闭文件时不检查返回值可能会导致数据静默丢失。这在使用NFS和磁盘配额时尤其明显。- Nick Craig-Wood Jan 25 '13 at 7:12
// close fo on exit and check for its returned error
defer func() {
if err := fo.Close(); err != nil {
panic(err)
}
}()
我希望将这个错误作为一个值而不是抛出异常。
func checkedClose(c io.Closer, perr *error)
并使用defer checkedClose(fd, &err)
来安排它的延迟调用。换句话说,这是那些罕见情况之一,其中指向接口值的指针非常有用。 - kostixlog
输出被重定向到的地方)写入消息来替代关闭文件时静默处理错误。虽然这可能比完全忽略错误稍微好一些,但是你将很难将你的通用解决方案适应到执行... - kostixos.Copy
来读取临时文件的内容并写入fd。目前我没有重试功能,但如果该函数返回关闭错误,那可能是正确的解决方案。 - Brianstruct
类型如果包含具有引用语义的字段,则会自动"继承"这些引用语义。但是,Go语言仍然没有引用(例如,C++和C#作为一种语言概念中有引用,但Go语言没有),它有指针,并且我建议使用指针;-) - kostix