我正在构建一个可以同时从文件(从net/http
处理程序填充的goroutines)中读写文件的服务器。我创建了以下结构:
type transactionsFile struct {
File *os.File
Mutex *sync.RWMutex
}
我正在init()
函数中初始化文件一次。我应该在每次写操作时以某种方式关闭它吗?
答案 0 :(得分:4)
您无法写入已关闭的文件,因此,如果在每次写入操作之后将其关闭,则还必须在每次写入之前(重新)打开它。
这将是非常低效的。因此,请使其保持打开状态,并仅在应用程序即将终止时将其关闭(这是必需的,因为File.Write()
不保证在返回时将数据写入磁盘)。由于您是通过HTTP处理程序编写文件的,因此您应该实现正常的服务器终止,并在此之后关闭文件。有关详细信息,请参见Server.Shutdown()
。
此外,如果编写共享文件的目的是创建某种记录器,则可以利用log
包,因此您不必使用互斥体。有关详细信息,请参见net/http set custom logger。