(код без описания)
Условие
Заголовок раздела «Условие»(код без описания)
const MaxItems = 9999
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}
type Consumer interface { Process(items []any) error}
func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return fmt.Errorf("Producer errors: %w ", err) }
if len(buf)+len(items) <= MaxItems { buf = append(buf, items...) cookies = append(cookies, cookie) continue }
err := c.Process(buf) if err != nil { return fmt.Errorf("Consumer errors: %w ", err) }
for i, v := range cookies { err := p.Commit(v)
if err != nil { return fmt.Errorf("Not commit: %w ", err) } } buf = []any buf = append(buf, items...)
cookies = []int cookies = append(cookies, cookie) } return nil}Решение
Заголовок раздела «Решение»Источник: Yandex / Яндекс (3й этап) · 4 кв 2025
← Нам нужно передать данные из некоторого… · Все задачи · Go · Процессор - сервис, который выполняет д… →