0Pricing
Go Academy · Урок

Интерфейс Writer

Записывайте куда угодно

«Интерфейс Writer» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Запись куда угодно

io.Writer объединяет все источники вывода: файлы, сети, буферы, стандартный вывод и ответы HTTP. Один интерфейс — множество мест назначения.

Определение интерфейса

Контракт:

  • Write(p []byte) (n int, err error)

Он записывает p и возвращает количество записанных байт, а также возможную ошибку.

Запись в буфер

bytes.Buffer реализует io.Writer и накапливает вывод в памяти.

package main

import (
	"bytes"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	buf.Write([]byte("Hello, "))
	buf.WriteString("Writer!")
	fmt.Println(buf.String())
}

Запись в Stdout

os.Stdout — это io.Writer. os.Stderr тоже.

package main

import (
	"io"
	"os"
)

func main() {
	io.WriteString(os.Stdout, "straight to stdout\n")
}

fmt.Fprintf и средства записи

Семейство функций Fprint записывает форматированный текст в любое средство записи io.Writer.

package main

import (
	"bytes"
	"fmt"
)

func main() {
	var buf bytes.Buffer
	fmt.Fprintf(&buf, "x = %d\n", 42)
	fmt.Print(buf.String())
}

Ошибка неполной записи

Если Write возвращает n < len(p) с нулевой ошибкой, это нарушение контракта, называемое неполной записью. Соответствующие контракту средства записи сообщают об этом как io.ErrShortWrite.

Функции, принимающие средства записи

Пишите функции, принимающие io.Writer, чтобы одна и та же логика могла работать с файлом, буфером или сетью.

package main

import (
	"fmt"
	"io"
	"os"
)

func greet(w io.Writer, name string) {
	fmt.Fprintf(w, "Hi, %s\n", name)
}

func main() {
	greet(os.Stdout, "Ada")
}

Изоляция вывода для тестов

Поскольку функции принимают io.Writer, тесты записывают вывод в bytes.Buffer и проверяют его — обращаться к настоящим файлам не нужно.

package main

import (
	"bytes"
	"fmt"
)

func emit(w *bytes.Buffer) { fmt.Fprint(w, "result") }

func main() {
	var b bytes.Buffer
	emit(&b)
	fmt.Println("captured:", b.String())
}

Запись байтов и строк

Write принимает срез байтов, а io.WriteString — удобный способ работы со строками, который позволяет избежать выделения памяти, если писатель это поддерживает.

package main

import (
	"io"
	"os"
)

func main() {
	os.Stdout.Write([]byte("bytes\n"))
	io.WriteString(os.Stdout, "string\n")
}

Всегда проверяйте ошибки записи

Запись в файл или сокет может завершиться ошибкой в середине потока: диск может заполниться, а соединение — прерваться. Проверяйте возвращаемую ошибку, особенно при работе с писателями, использующими не память.

Один интерфейс, много назначений

  • Файлы, буферы, stdout/stderr
  • Писатели ответов HTTP
  • Обёртки для сжатия и шифрования

Все они соответствуют io.Writer, поэтому ваш код не зависит от места назначения.

Быстрая проверка

Проверьте свои знания об io.Writer.

Итоги

Вы изучили основной интерфейс вывода.

  • Write(p []byte) (int, error) — весь контракт
  • bytes.Buffer, os.Stdout и ответы HTTP реализуют его
  • Работает с fmt.Fprintf и io.WriteString
  • Принимайте io.Writer для гибких API, удобных для тестирования

Часто задаваемые вопросы

Урок «Интерфейс Writer» бесплатный?

Да — полный текст урока «Интерфейс Writer» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Интерфейс Writer»?

Записывайте куда угодно Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Интерфейс Writer»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Интерфейс Reader
  2. Интерфейс Writer
  3. Вспомогательные функции io
  4. Реализация собственных средств чтения
← Назад к Go Academy