Программа Golang закрывает файл до окончания записи

Я реализовал пользовательский интерфейс записи для моей облачной программы. Моя проблема до сих пор состоит в том, что после того, как я закончу копировать файлы в мой писатель и закрою Writer, у писателя все еще есть несколько операций записи (обычно может быть 4 записи по 4096 байт каждая). Последняя запись обычно меньше 4096.

Этого еще не произошло, но я знаю, что с вероятностью 1/4096 последняя запись составляет 4096 байт, и моя программа не завершится.

Я использую это для zip-программы, и io.EOF неэффективен, так как каждый блок записи имеет его, также проверка, закрыта ли запись, происходит слишком рано, хотя есть еще какие-то записи, которые нужно сделать.

Каков наилучший способ справиться с этой ситуацией?

*** РЕДАКТИРОВАТЬ ***** Я закончил тем, что реализовал более надежный метод Write(), Flush() и Close(). Теперь все хорошо, если я использую defer Close(), но у меня все равно возникает та же проблема, если я вручную вызовите Close() в конце

2 ответа

Проблема была решена путем внедрения более надежного Close() функция. Я также использовал defer Close() чтобы убедиться, что Голанг обработал все Goroutines внутренне.

Так как у вас есть полный контроль над писателем, вы можете использовать группу ожидания для ожидания в вашем main чтобы все горутины закончились.

Другие вопросы по тегам