Спроектируйте публичный интерфейс (API) библиотеки для копирования файлов на Go — заголовки функций и типов, максимально удобные для разработчиков.
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-стилю.