РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
576 of 1593 menu

Функция io.CopyN

Функция io.CopyN копирует ровно указанное количество байт из io.Reader (источник) в io.Writer (приемник). В первый параметр передается приемник, во второй — источник, в третий — количество байт, которое необходимо скопировать. Функция возвращает количество скопированных байт и ошибку, если она возникла.

Особенность io.CopyN заключается в том, что она требует копирования строго заданного числа байт. Если источник содержит меньше байт, чем запрошено, функция вернет ошибку io.EOF. Если при копировании происходит ошибка, функция возвращает количество успешно скопированных байт и ошибку.

Синтаксис

io.CopyN(writer, reader, n)

Пример с файлами

Давайте скопируем 10 байт из одного файла в другой:

package main import ( "io" "os" ) func main() { src, err := os.Open("source.txt") if err != nil { panic(err) } defer src.Close() dst, err := os.Create("dest.txt") if err != nil { panic(err) } defer dst.Close() n, err := io.CopyN(dst, src, 10) if err != nil { panic(err) } println(n, "bytes copied") }

Результат выполнения кода:

"10 bytes copied"

Пример с ошибкой EOF

Попробуем скопировать больше байт, чем есть в источнике:

package main import ( "io" "os" ) func main() { src, err := os.Open("small.txt") if err != nil { panic(err) } defer src.Close() dst, err := os.Create("output.txt") if err != nil { panic(err) } defer dst.Close() n, err := io.CopyN(dst, src, 100) if err != nil { println("Error:", err.Error()) } println(n, "bytes copied") }

Результат выполнения кода:

"Error: EOF" "5 bytes copied"

Пример со строкой

Скопируем 5 байт из строки с использованием strings.NewReader:

package main import ( "io" "os" "strings" ) func main() { reader := strings.NewReader("abcdefghijklmnopqrstuvwxyz") writer := os.Stdout n, err := io.CopyN(writer, reader, 5) if err != nil { panic(err) } println(n, "bytes copied") }

Результат выполнения кода:

"abcde" "5 bytes copied"

Смотрите также

  • функцию io.Copy,
    которая копирует все данные из источника в приемник до достижения EOF
  • функцию io.CopyBuffer,
    которая копирует данные с использованием указанного буфера
  • функцию io.ReadAll,
    которая считывает все данные из источника в байтовый срез
  • функцию io.LimitReader,
    которая создает читателя, ограничивающего чтение заданным количеством байт
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить