В документации Go io.Reader
указано, что Read()
может возвращать ненулевое значение n
и io.EOF
одновременно. К сожалению, метод Read()
для File
этого не делает.
Когда EOF достигнут и некоторые байты все еще могут быть прочитаны, метод чтения файла возвращает ненулевую ошибку n
и nil
. Только когда мы пытаемся прочитать, когда уже в конце файла, мы возвращаем ноль n
и io.EOF
как ошибку.
Я не смог найти простой способ проверить, достигнут ли EOF, не пытаясь прочитать данные из файла. Если мы выполним Read() с буфером из 0 байт, мы получим нулевую ошибку n
и nil
, хотя мы находимся в конце файла.
Чтобы избежать этого последнего чтения, единственное решение, которое я нашел, - это самостоятельно отслеживать количество байтов, оставшихся для чтения в файле. Есть ли более простое решение?