Программа Golang закрывает файл до окончания записи
Я реализовал пользовательский интерфейс записи для моей облачной программы. Моя проблема до сих пор состоит в том, что после того, как я закончу копировать файлы в мой писатель и закрою Writer, у писателя все еще есть несколько операций записи (обычно может быть 4 записи по 4096 байт каждая). Последняя запись обычно меньше 4096.
Этого еще не произошло, но я знаю, что с вероятностью 1/4096 последняя запись составляет 4096 байт, и моя программа не завершится.
Я использую это для zip-программы, и io.EOF неэффективен, так как каждый блок записи имеет его, также проверка, закрыта ли запись, происходит слишком рано, хотя есть еще какие-то записи, которые нужно сделать.
Каков наилучший способ справиться с этой ситуацией?
*** РЕДАКТИРОВАТЬ ***** Я закончил тем, что реализовал более надежный метод Write(), Flush() и Close(). Теперь все хорошо, если я использую defer Close(), но у меня все равно возникает та же проблема, если я вручную вызовите Close() в конце
2 ответа
Проблема была решена путем внедрения более надежного Close()
функция. Я также использовал defer Close()
чтобы убедиться, что Голанг обработал все Goroutines внутренне.
Так как у вас есть полный контроль над писателем, вы можете использовать группу ожидания для ожидания в вашем main
чтобы все горутины закончились.