Пакет 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.