Sobes.tech
Back to questions
Senior
1

Спроектируйте публичный интерфейс (API) библиотеки для копирования файлов на Go — заголовки функций и типов, максимально удобные для разработчиков.

Companies where asked
Бюро 1440Бюро 1440

Answer from AI

sobes.tech AI

go package filecopy

import "io"

// CopyFile копирует файл из src в dst. // Если dst не существует, создаётся новый файл. // Возвращает количество скопированных байт и ошибку, если она произошла. func CopyFile(srcPath, dstPath string) (int64, error)

// CopyFileWithOptions копирует файл с дополнительными опциями. // Например, можно указать буфер, перезаписывать ли файл, копировать ли права доступа и т.д. type CopyOptions struct { Overwrite bool // перезаписывать ли файл, если он существует BufferSize int // размер буфера для копирования, 0 — использовать значение по умолчанию PreservePermissions bool // копировать права доступа }

func CopyFileWithOptions(srcPath, dstPath string, opts CopyOptions) (int64, error)

// Copy копирует данные из io.Reader в io.Writer с опциями. // Позволяет копировать не только файлы, но и любые потоки данных. func Copy(dst io.Writer, src io.Reader, opts CopyOptions) (int64, error)


Такой интерфейс удобен, потому что:
- Есть простой метод CopyFile для базового копирования файлов.
- Есть расширенный метод с опциями для более тонкой настройки.
- Есть универсальный Copy для потоков, что повышает гибкость.
- Используются понятные типы и имена, соответствующие Go-стилю.