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

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

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

Синтаксис

Интерфейс io.Writer объявляется следующим образом:

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

Метод Write принимает срез байтов p и пытается записать их в поток. Возвращает количество записанных байтов и ошибку. Если записано меньше байтов, чем длина среза, должен быть возвращен ненулевой код ошибки.

Пример

Давайте запишем строку в стандартный вывод с использованием интерфейса io.Writer:

package main import ( "fmt" "io" "os" ) func main() { message := "Hello, World!" bytes := []byte(message) n, err := io.WriteString(os.Stdout, string(bytes)) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("\nWritten %d bytes", n) }

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

"Hello, World!" "Written 13 bytes"

Пример

Давайте запишем данные в файл с помощью интерфейса io.Writer:

package main import ( "fmt" "os" ) func main() { file, err := os.Create("example.txt") if err != nil { fmt.Println("Error creating file:", err) return } defer file.Close() data := []byte("Data to write to file") n, err := file.Write(data) if err != nil { fmt.Println("Error writing to file:", err) return } fmt.Printf("Written %d bytes to file", n) }

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

"Written 22 bytes to file"

Пример

Давайте используем множественный писатель для записи одновременно в несколько потоков:

package main import ( "bytes" "fmt" "io" "os" ) func main() { buf := bytes.NewBufferString("") writer := io.MultiWriter(os.Stdout, buf) message := "Multi-writer example" bytes := []byte(message) n, err := writer.Write(bytes) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Written %d bytes\n", n) fmt.Printf("Buffer content: %s", buf.String()) }

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

"Multi-writer example" "Written 20 bytes" "Buffer content: Multi-writer example"

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

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