file - 我应该在同时写入/读取时关闭文件吗?

标签 file go concurrency

我正在制作一个可以同时从文件读取/写入的服务器(从由 net/http 处理程序填充的 goroutines)。我创建了以下结构:

type transactionsFile struct {
    File  *os.File
    Mutex *sync.RWMutex
}

我在 init() 函数中初始化文件一次。我应该在每次写入操作时以某种方式关闭它吗?

最佳答案

您不能写入已关闭的文件,因此如果您在每次写入操作后关闭它,您还必须在每次写入之前(重新)打开它。

这将是非常低效的。所以不要让它保持打开状态,只有在你的应用程序即将终止时才关闭它(这是必需的,因为 File.Write() 不保证当它返回时数据被写入磁盘)。由于您是从 HTTP 处理程序编写文件,因此您应该实现正常的服务器终止,然后关闭文件。参见 Server.Shutdown()了解详情。

此外,如果您编写共享文件的目的是创建某种记录器,您可以利用 log包,因此您不必使用互斥锁。有关详细信息,请参阅 net/http set custom logger .

关于file - 我应该在同时写入/读取时关闭文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54764757/

相关文章:

c - 分配内存并将输入从文件读取到结构数组

java - 如何从另一个 .class 文件运行 Java .class 文件? (java新手)

go - GO中小写字母开头怎么暴露错误接口(interface)?

docker - 在 Linux 上使用 confluent-kafka-go 构建 Go 应用程序

go - 特定错误处理的不明确行为

c - 在C中覆盖文件的内容

java - 在java中读取流文件

java - 将缓冲区写入 Java channel : Thread-safe or not?

Objective-C 条件等待

go - 在读取和修改之前锁定 slice