РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
563 of 1593 menu

Интерфейс io.Reader

Интерфейс io.Reader представляет любой источник данных, из которого можно читать байты. Этот интерфейс используется повсеместно в стандартной библиотеке Go для работы с файлами, сетевыми соединениями, строками, буферами и другими потоками данных. Основной метод интерфейса — Read, который принимает в качестве аргумента байтовый срез и возвращает количество прочитанных байтов и ошибку.

Метод Read считывает данные в переданный срез p и возвращает количество прочитанных байтов n. Если достигнут конец данных, метод возвращает ошибку io.EOF. Важно отметить, что метод может вернуть меньше байтов, чем размер среза, даже если данные еще не закончились.

Синтаксис

type Reader interface { Read(p []byte) (n int, err error) }

Пример

Давайте прочитаем данные из строки с помощью strings.NewReader, который возвращает io.Reader:

package main import ( "fmt" "io" "strings" ) func main() { r := strings.NewReader("abcde") buf := make([]byte, 2) for { n, err := r.Read(buf) if err == io.EOF { break } if err != nil { fmt.Println(err) return } fmt.Printf("%s", string(buf[:n])) } }

Результат выполнения кода:

"abcde"

Пример

Прочитаем данные из файла с помощью os.Open, который возвращает *os.File, реализующий io.Reader:

package main import ( "fmt" "io" "os" ) func main() { file, err := os.Open("test.txt") if err != nil { fmt.Println(err) return } defer file.Close() buf := make([]byte, 5) for { n, err := file.Read(buf) if err == io.EOF { break } if err != nil { fmt.Println(err) return } fmt.Print(string(buf[:n])) } }

Результат выполнения кода:

"Hello, World!"

Пример

Используем функцию io.ReadAll для чтения всех данных из io.Reader в один срез байтов:

package main import ( "fmt" "io" "strings" ) func main() { r := strings.NewReader("12345") data, err := io.ReadAll(r) if err != nil { fmt.Println(err) return } fmt.Printf("%s", data) }

Результат выполнения кода:

"12345"

Смотрите также

  • интерфейс io.Writer,
    который используется для записи данных в поток
  • интерфейс io.Closer,
    который предоставляет метод Close для закрытия ресурсов
  • функцию io.ReadAll,
    которая читает все данные из Reader до EOF
  • функцию io.Copy,
    которая копирует данные из Reader в Writer
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить