io.Copy читает данные из Reader и пишет в Writer до EOF или ошибки. Внутри использует буфер 32KB, но если Writer реализует ReadFrom или Reader реализует WriteTo — вызывает их напрямую, что может быть эффективнее. Возвращает количество скопированных байт и ошибку. Это основной способ перекачивать потоки данных.