Ошибка io.EOF
Ошибка io.EOF (End Of File) возвращается функциями чтения,
когда они пытаются прочитать данные из источника, в котором больше нет доступных данных.
Это не критическая ошибка, а стандартный сигнал о том, что данные закончились.
В первом параметре функции чтения передается источник данных (например, файл),
во второй параметр передается буфер для чтения данных.
Синтаксис
import "io"
n, err := r.Read(buf)
if err == io.EOF {
// данные закончились
}
Пример с чтением из файла
Давайте прочитаем файл целиком и обработаем ошибку io.EOF:
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
buf := make([]byte, 1024)
for {
n, err := file.Read(buf)
if err == io.EOF {
fmt.Println("End of file reached")
break
}
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Print(string(buf[:n]))
}
}
Результат выполнения кода (если в файле example.txt содержится текст "Hello, World!"):
"Hello, World!"
"End of file reached"
Пример с использованием io.ReadAll
Функция io.ReadAll читает все данные из источника до тех пор,
пока не встретит io.EOF:
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("12345")
data, err := io.ReadAll(r)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(data))
}
Результат выполнения кода:
"12345"
Пример с чтением по байтам
При посимвольном чтении также может возникнуть io.EOF:
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
data := []byte("abcde")
reader := bytes.NewReader(data)
for {
b, err := reader.ReadByte()
if err == io.EOF {
fmt.Println("EOF")
break
}
if err != nil {
fmt.Println("Error:", err)
break
}
fmt.Printf("%c ", b)
}
}
Результат выполнения кода:
"a b c d e EOF"
Смотрите также
-
ошибку
io.ErrUnexpectedEOF,
которая возникает при неожиданном окончании данных -
функцию
io.ReadAll,
которая читает все данные до конца -
метод
os.File.Read,
который возвращаетio.EOFпри достижении конца файла -
функцию
io.Copy,
которая копирует данные до достижения конца источника