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

Функция io.Copy

Функция io.Copy копирует данные из io.Reader в io.Writer до тех пор, пока не будет достигнут конец чтения (EOF) или не произойдет ошибка. Она возвращает количество скопированных байтов и ошибку. В первый параметр мы передаем объект, реализующий интерфейс io.Writer (куда копируем), во второй параметр мы передаем объект, реализующий интерфейс io.Reader (откуда копируем).

В отличие от ручного копирования через цикл, io.Copy использует оптимизированный буфер по умолчанию (32 КБ) и автоматически обрабатывает все возможные ситуации с частичным чтением и записью данных.

Синтаксис

io.Copy(dst, src)

Где dst - объект, реализующий интерфейс io.Writer, а src - объект, реализующий интерфейс io.Reader. Функция возвращает два значения: количество скопированных байтов (тип int64) и ошибку.

Пример

Давайте скопируем данные из стандартного ввода в стандартный вывод:

package main import ( "io" "os" ) func main() { _, err := io.Copy(os.Stdout, os.Stdin) if err != nil { os.Stderr.WriteString("Error: " + err.Error()) } }

После запуска программы все введенные данные будут сразу выводиться обратно до нажатия Ctrl+D (или Ctrl+Z на Windows).

Пример

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

package main import ( "io" "os" ) func main() { srcFile, err := os.Open("input.txt") if err != nil { panic(err) } defer srcFile.Close() dstFile, err := os.Create("output.txt") if err != nil { panic(err) } defer dstFile.Close() bytesCopied, err := io.Copy(dstFile, srcFile) if err != nil { panic(err) } println("Copied", bytesCopied, "bytes") }

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

"Copied 12345 bytes"

Функция скопирует все данные из input.txt в output.txt и вернет точное количество скопированных байтов.

Пример

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

package main import ( "bytes" "io" "strings" ) func main() { reader := strings.NewReader("abcde") buffer := &bytes.Buffer{} _, err := io.Copy(buffer, reader) if err != nil { panic(err) } println(buffer.String()) }

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

"abcde"

Функция скопировала строку 'abcde' из strings.Reader в bytes.Buffer.

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

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