Должен ли я закрыть файл во время записи / чтения одновременно? - PullRequest
0 голосов
/ 19 февраля 2019

Я делаю сервер, который может читать / писать из файла одновременно (из goroutines, заполненных обработчиками net/http).Я создал следующую структуру:

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

Я инициализирую файл один раз с помощью функции init().Стоит ли как-то закрывать его при каждой операции записи?

1 Ответ

0 голосов
/ 19 февраля 2019

Вы не можете писать в закрытый файл, поэтому, если вы закрываете его после каждой операции записи, вам также придется (повторно) открывать его перед каждой записью.

Это было бы совершенно неэффективно.Поэтому вместо этого оставляйте его открытым и закрывайте его только после того, как ваше приложение собирается завершить работу (это необходимо, потому что File.Write() не гарантирует, что при возврате данные будут записаны на диск).Поскольку вы пишете файл из обработчиков HTTP, вы должны реализовать корректное завершение работы сервера и после этого закрыть файл.Подробнее см. Server.Shutdown().

Кроме того, если целью записи вашего общего файла является создание какого-либо регистратора, вы можете воспользоваться log, поэтому вам не придется использовать мьютекс.Подробнее см. net / http set custom logger .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...