Как скопировать n байт из одного потока в другой на Go
Содержимое статьи:
Задача
Напишите функцию Copy(r io.Reader, w io.Writer, n uint) error, которая копирует n байт из потока чтения r в поток записи w. В случае, если доступно для чтения меньше n байт, функция должна скопировать все доступные данные. В случае ошибки функция должна вернуть ее.
Решение
import (
"fmt"
"io"
)
func Copy(r io.Reader, w io.Writer, n uint) error {
if n == 0 {
return nil
}
buf := make([]byte, n)
for {
nr, err := r.Read(buf)
if nr > 0 {
nw, err := w.Write(buf[:nr])
if err != nil {
return err
}
if nw != nr {
return fmt.Errorf("copy: wrote %d bytes of %d", nw, nr)
}
}
if err == io.EOF {
break
}
if err != nil {
return err
}
}
return nil
}
АПТЕЧКА ДЛЯ СОБАКИ С ПОМОЩЬЮ
Бесплатный курс Excel для логистики: учёт остатков и подбор авто
Чат рулетка 2026: чаты с неожиданными результатами
Чат рулетка без смс и привязки
Чат с Аней: интимный разговор
Чатрулетка: чат без ограничений
Детские игрушки для развития мелкой моторики
Эксплуатация шин: Правильная эксплуатация погрузчика
Фототехника с сенсором CCD
Генератор паролей с шифрованием
Инновации в использовании 3D-печата для создания легких бетонных блоков в строительстве
Инновационные методы 3D-печати в строительстве жилых домов из бетона
Купибилет: Ваш Персональный Помощник в Путешествиях
Нейросети для профессионалов: бесплатно
Оборудование IP видеосистем
Оптимизация заголовков в GEO проекте
Полноэкранная визуализация времени
Сервер для разработки сайтов: Безопасность, Скорость, Изоляция
Смешная жизнь
Уникальные особенности российских брендов
Ведущие немецкие бренды: FORD, MERSEDES, VW, IVECO
Вкус чая и кофе: нюансы