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

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

Интерфейс io.ReadWriter представляет собой объединение двух базовых интерфейсов: io.Reader и io.Writer. Тип, реализующий этот интерфейс, должен предоставлять методы Read и Write, что делает его пригодным для двустороннего обмена данными.

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

Синтаксис

type ReadWriter interface { Reader Writer }

Пример

Создадим простой буфер, который реализует io.ReadWriter, и продемонстрируем последовательную запись и чтение данных:

package main import ( "bytes" "fmt" "io" ) func main() { // Буфер реализует io.ReadWriter var rw io.ReadWriter = bytes.NewBuffer(nil) // Записываем данные rw.Write([]byte("Hello, World!")) // Читаем данные buf := make([]byte, 20) n, err := rw.Read(buf) if err != nil && err != io.EOF { fmt.Println(err) return } res := string(buf[:n]) fmt.Println(res) }

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

"Hello, World!"

Пример

Используем io.ReadWriter для копирования данных из одного места в другое с промежуточной обработкой:

package main import ( "bytes" "fmt" "io" ) func main() { src := bytes.NewBufferString("abcde") dst := bytes.NewBuffer(nil) // Преобразуем dst к io.ReadWriter var rw io.ReadWriter = dst // Копируем данные из src в dst _, err := io.Copy(rw, src) if err != nil { fmt.Println(err) return } // Читаем из dst через интерфейс ReadWriter buf := make([]byte, 10) n, err := rw.Read(buf) if err != nil && err != io.EOF { fmt.Println(err) return } res := string(buf[:n]) fmt.Println(res) }

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

"abcde"

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

  • интерфейс io.Reader,
    предоставляющий метод Read для чтения данных
  • интерфейс io.Writer,
    предоставляющий метод Write для записи данных
  • интерфейс io.ReadCloser,
    объединяющий чтение и закрытие ресурса
  • интерфейс io.WriteCloser,
    объединяющий запись и закрытие ресурса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить