Функция io.MultiWriter
Функция io.MultiWriter создает объект, реализующий интерфейс io.Writer, который при вызове метода Write одновременно передает данные всем указанным писателям. В первый аргумент передается переменное количество писателей, в которые будет производиться запись. Функция возвращает составной писатель, который можно использовать как обычный io.Writer. Если хотя бы один из писателей возвращает ошибку, операция записи прерывается и возвращается эта ошибка.
Синтаксис
func MultiWriter(writers ...io.Writer) io.Writer
Пример
Давайте создадим составной писатель, который записывает данные одновременно в файл и в стандартный вывод:
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Create("output.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
mw := io.MultiWriter(file, os.Stdout)
message := "Hello, world!"
n, err := mw.Write([]byte(message))
if err != nil {
fmt.Println("Error writing:", err)
return
}
fmt.Printf("\nWritten %d bytes", n)
}
Результат выполнения кода:
"Hello, world!"
"Written 13 bytes"
Пример
Давайте используем io.MultiWriter для записи в несколько буферов одновременно:
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
buf1 := &bytes.Buffer{}
buf2 := &bytes.Buffer{}
mw := io.MultiWriter(buf1, buf2)
mw.Write([]byte("abcde"))
fmt.Println(buf1.String())
fmt.Println(buf2.String())
}
Результат выполнения кода:
"abcde"
"abcde"
Пример
Давайте рассмотрим случай, когда один из писателей возвращает ошибку:
package main
import (
"bytes"
"fmt"
"io"
)
type errorWriter struct{}
func (ew errorWriter) Write(p []byte) (int, error) {
return 0, fmt.Errorf("write error")
}
func main() {
buf := &bytes.Buffer{}
ew := errorWriter{}
mw := io.MultiWriter(buf, ew)
_, err := mw.Write([]byte("abcde"))
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println(buf.String())
}
Результат выполнения кода:
"Error: write error"
""
Смотрите также
-
функцию
io.MultiReader,
которая объединяет несколько ридеров в один -
функцию
io.TeeReader,
которая дублирует данные во время чтения -
функцию
io.Copy,
которая копирует данные из ридера в писатель -
функцию
io.WriteString,
которая записывает строку в писатель