file

package
v1.2.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2023 License: MIT Imports: 4 Imported by: 0

README

Шардирование файла.

Пакет предоставляет функционал по шардированию файла и абстрагирует его, до уровня стандартного интерфейса GoLang io.ReadWriteCloser.

Пакет разбивается на несколько отдельных интерфейсов, которые можно использовать не зависимо друг от друга:

  • Collection - предоставляет коллекцию шардов файлов, доступные готовые реализации находятся в пакете collection;
  • Namer - предоставляет имя для нового шарда файла, доступные готовые реализации находятся в пакете namer;
  • Rotator - Условия для ротации шардов файла, доступные готовые реализации находятся в пакете rotator;
  • Writer - расширяет стандартный интерфейс GoLang io.WriteCloser под нужды пакета, реализации должны абстрагировать запись в шарды файла, имитируя запись в один файл, доступные готовые реализации находятся в пакете writer;
  • Reader - расширяет стандартный интерфейс GoLang io.ReadCloser под нужды пакета, реализации должны абстрагировать чтение из шардов файла, имитируя чтение из одного файла, доступные готовые реализации находятся в пакете reader.
type CollectionOption func(collection Collection) (Collection, error)

type Collection interface {
	Next() (*os.File, error)
	Count() int
	Namer() Namer
}

type Namer interface {
    Name() string
    SearchRegexp() *regexp.Regexp
    AddExtension(extension string)
}

type Rotator interface {
    Rotate(fileInfo os.FileInfo) bool
}

type WriterOption func(writer Writer) (Writer, error)

type Writer interface {
    io.WriteCloser
    File() (*os.File, error)
    OpenNewFile() error
    Namer() Namer
}

type ReaderOption func(reader Reader) (Reader, error)

type Reader interface {
    io.ReadCloser
    File() (*os.File, error)
    Collection() Collection
}

Пакет предоставляет объект File, который реализует интерфейс io.ReadWriteCloser и синхронизирует компоненты Writer и Reader, во избежание чтения и записи в/из одного шарда файла. Для получения ссылки на новый объект File следует использовать метод NewFile(writer Writer, reader Reader)

Важно. Объект File не является потокобезопасным, весь процесс записи должен проходить последовательно, для избежании повреждения данных.

Documentation

Index

Constants

View Source
const (
	ExtensionSeparator = "."
)

Variables

View Source
var (
	StorageIsNotDirectoryError = errors.New("file: storage is not directory")
	ChangedNextShardError      = errors.New("file: changed to next shard")
)

Functions

func CheckDirectory

func CheckDirectory(directory string) error

Types

type Collection

type Collection interface {
	Next() (*os.File, error)
	Count() int
	Namer() Namer
}

type CollectionOption

type CollectionOption func(collection Collection) (Collection, error)

type File

type File struct {
	// contains filtered or unexported fields
}

func NewFile

func NewFile(writer Writer, reader Reader) *File

func (*File) Close

func (file *File) Close() error

func (*File) Read

func (file *File) Read(buffer []byte) (int, error)

func (*File) Write

func (file *File) Write(buffer []byte) (int, error)

type Namer

type Namer interface {
	Name() string
	SearchRegexp() *regexp.Regexp
	AddExtension(extension string)
}

type Reader

type Reader interface {
	io.ReadCloser
	File() (*os.File, error)
	Collection() Collection
}

type ReaderOption

type ReaderOption func(reader Reader) (Reader, error)

type Rotator

type Rotator interface {
	Rotate(fileInfo os.FileInfo) bool
}

type Writer

type Writer interface {
	io.WriteCloser
	File() (*os.File, error)
	OpenNewFile() error
	Namer() Namer
}

type WriterOption

type WriterOption func(writer Writer) (Writer, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL