вторник, 15 января 2019 г.

Основы Go: интерфейс Reader

Пакет io объявляет интерфейс io.Reader, который представляет сторону потока данных, предназначенную для чтения.

Стандартная библиотека Go содержит множество реализаций этого интерфейса, включая файлы, сетевые соединения, компрессоры, шифрователи и другие.

Интерфейс io.Reader имеет метод Read:

func (T) Read(b []byte) (n int, err error)

Read записывает данные в предоставленный срез байтов и возвращает количество записанных байтов и значение типа error. Он возвращает ошибку io.EOF, когда поток заканчивается.

Данный пример кода создает strings.Reader и считывает его вывод по 8 байтов за раз.

package main

import (
  "fmt"
  "io"
  "strings"
)

func main() {
  r := strings.NewReader("Hello, Reader!")

  b := make([]byte, 8)
  for {
    n, err := r.Read(b)
    fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
    fmt.Printf("b[:n] = %q\n", b[:n])
    if err == io.EOF {
      break
    }
  }
}

Вывод:

n = 8 err =  b = [72 101 108 108 111 44 32 82]
b[:n] = "Hello, R"
n = 6 err =  b = [101 97 100 101 114 33 32 82]
b[:n] = "eader!"
n = 0 err = EOF b = [101 97 100 101 114 33 32 82]
b[:n] = ""


Читайте также:


Комментариев нет:

Отправить комментарий