Перейти к содержимому

Требуется реализовать функцию func Pipe(p Producer, c Consumer) error, которая:

go · errors-panicYandex / Яндексне решено

Требуется реализовать функцию func Pipe(p Producer, c Consumer) error, которая:

  • читает данные из источника и передает их потребителю. Считаем, что источник условно бесконечный;
  • при чтении формирует буфер, максимальный размер которого задается константой MaxItems и передает данные потребителю только когда буфер близок к заполнению;
  • после обработки данных потребителем, вызывает для них метод Commit, передавая в него cookies в той последовательности, в которой они были получены от источника;
  • в случае возникновения ошибок - функция должна завершиться. Если ошибка возникла на вызове Commit - больше никакие данные не должны быть закоммичены (т.к. в противном случае нарушится очередность коммитов).
type Producer interface {
// Next returns:
// - batch of items to be processed
// - cookie to be commited when processing is done
// - error
Next() (items []any, cookie int, err error)
// Commit is used to mark data batch as processed
Commit(cookie int) error
}
const MaxItems = 9999
type Consumer interface {
Process(items []any) error
}
func Pipe(p Producer, c Consumer) error {}

Источник: Yandex / Яндекс

← Требуется написать алго с учетом эффект… · Все задачи · Go · Нам нужно передать данные из некоторого… →