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

Функция 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,
    которая записывает строку в писатель
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить