我正在制作一个可以同时从文件读取/写入的服务器(从由 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/