Skip to content

Пакет io

Что ты узнаешь:

  • Что такое функционал io.Reader и io.Writer и как с ними работать.

  • Какие существуют полезные типы и пакеты для ввода-вывода, как и когда их стоит применять.

В Go операции ввода и вывода выполняются с использованием примитивов, которые моделируют данные как потоки байтов, которые можно читать или записывать. Для этого пакет io предоставляет интерфейсы io.Reader и io.Writer для операций ввода и вывода данных соответственно, как показано на рисунке ниже.

Go поставляется со многими API-интерфейсами, которые поддерживают потоковый ввод-вывод из таких ресурсов, как структуры в памяти, файлы, сетевые подключения и многие другие. Далее мы рассмотрим процесс создания программ Go, способных выполнять потоковую передачу данных с использованием интерфейсов io.Reader и io.Writer пользовательских реализаций, а также реализаций из стандартной библиотеки.

io.Reader

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

Чтобы тип функционировал как reader, он должен реализовать метод Read(p []byte) из интерфейса io.Reader.

Реализация метода Read() должна возвращать количество прочитанных байтов или ошибку, если она произошла. Если источник исчерпал свое содержимое, Read должен вернуть io.EOF.