Вспомогательные функции io
Copy, TeeReader и MultiWriter
«Вспомогательные функции io» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Набор инструментов io
Пакет io содержит небольшие, но мощные вспомогательные средства для объединения читателей и писателей: Copy, TeeReader, MultiWriter и другие.
io.Copy
io.Copy(dst, src) передаёт все байты из читателя писателю и возвращает их количество.
package main
import (
"fmt"
"io"
"os"
"strings"
)
func main() {
n, _ := io.Copy(os.Stdout, strings.NewReader("copied\n"))
fmt.Println("bytes:", n)
}io.CopyN
io.CopyN(dst, src, n) копирует ровно n байт — это удобно для чтения префикса известной длины.
package main
import (
"io"
"os"
"strings"
)
func main() {
io.CopyN(os.Stdout, strings.NewReader("abcdef"), 3)
os.Stdout.WriteString("\n")
}io.MultiWriter
io.MultiWriter одновременно направляет одну запись нескольким писателям — подобно команде Unix tee.
package main
import (
"bytes"
"fmt"
"io"
"os"
)
func main() {
var buf bytes.Buffer
w := io.MultiWriter(os.Stdout, &buf)
io.WriteString(w, "to both\n")
fmt.Println("buffer copy:", buf.String())
}io.TeeReader
io.TeeReader(r, w) возвращает читатель, который копирует всё прочитанное в w — идеально подходит для журналирования или хеширования данных по мере их прохождения.
package main
import (
"bytes"
"fmt"
"io"
"strings"
)
func main() {
var spy bytes.Buffer
tee := io.TeeReader(strings.NewReader("stream"), &spy)
io.ReadAll(tee)
fmt.Println("observed:", spy.String())
}io.MultiReader
io.MultiReader объединяет несколько читателей в один непрерывный поток.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := io.MultiReader(strings.NewReader("Hello, "), strings.NewReader("World"))
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}io.Discard
io.Discard — это писатель, который отбрасывает всё полученное; он полезен, чтобы вычитать ненужные данные из читателя.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
n, _ := io.Copy(io.Discard, strings.NewReader("ignored"))
fmt.Println("discarded:", n, "bytes")
}Хеширование с помощью TeeReader
Классический приём: читайте поток для его основной задачи, пока TeeReader передаёт те же байты хеш-функции, чтобы вычислить контрольную сумму за один проход.
io.Pipe
io.Pipe соединяет писателя с читателем в памяти, часто между горутинами, для потоковой обработки по схемам «производитель — потребитель».
Выбор подходящего средства
- Перемещение данных:
Copy/CopyN - Дублирование вывода:
MultiWriter - Наблюдение за входными данными:
TeeReader - Объединение входных данных:
MultiReader - Вычитывание входных данных:
Discard
Композиция
Все эти средства работают с io.Reader/io.Writer, поэтому их можно свободно вкладывать и объединять в цепочки, создавая сложные конвейеры из небольших компонентов.
Быстрая проверка
Проверьте свои знания об утилитах io.
Итоги
Вы изучили вспомогательные средства io.
Copy/CopyNпередают данные потокомMultiWriterдублирует выводTeeReaderнаблюдает за входными даннымиMultiReaderобъединяет, аDiscardвычитывает данные- Все они объединяются с помощью интерфейсов Reader/Writer
Изучай Go с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Вспомогательные функции io» бесплатный?
Да — полный текст урока «Вспомогательные функции io» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Вспомогательные функции io»?
Copy, TeeReader и MultiWriter Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Вспомогательные функции io»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Интерфейс Reader
- Интерфейс Writer
- Вспомогательные функции io
- Реализация собственных средств чтения