Интерфейс 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 — локальная установка не требуется.