суббота, 18 июля 2020 г.

Пакет io в Golang, запись

Функция WriteString

func WriteString(w Writer, s string) (n int, err error)

WriteString записывает содержимое строки s в w, которая принимает часть байтов. Если w реализует StringWriter, его метод WriteString вызывается напрямую. В противном случае w.Write вызывается ровно один раз.

package main

import (
    "io"
    "os"
)

func main() {
    io.WriteString(os.Stdout, "Hello World")

}

Вывод:

Hello World

Интерфейс Writer

Writer - это интерфейс, который оборачивает базовый метод Write.

type Writer interface {
    Write(p []byte) (n int, err error)
}

Write записывает len(p) байтов из p в подлежащий поток данных. Он возвращает количество байтов, записанных из p (0 <= n <= len(p)), и любую обнаруженную ошибку, которая привела к преждевременной остановке записи. Write должен возвращать ошибку, отличную от nil, если он возвращает n < len(p). Write не должен изменять данные среза, даже временно.

Реализации не должны сохранять p.

Функция MultiWriter

func MultiWriter(writers ...Writer) Writer

MultiWriter создает writer, который дублирует свои записи всем предоставленным writer, аналогично команде Unix tee(1).

Каждая запись пишется каждому из перечисленных writer по одному. Если перечисленный writer возвращает ошибку, эта операция записи останавливается и возвращает ошибку; это не продолжается вниз по списку.

package main

import (
    "bytes"
    "fmt"
    "io"
    "log"
    "strings"
)

func main() {
    r := strings.NewReader("some io.Reader stream to be read\n")

    var buf1, buf2 bytes.Buffer
    w := io.MultiWriter(&buf1, &buf2)

    if _, err := io.Copy(w, r); err != nil {
        log.Fatal(err)
    }

    fmt.Print(buf1.String())
    fmt.Print(buf2.String())

}

Вывод:

some io.Reader stream to be read
some io.Reader stream to be read


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


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

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