Go · 41 строк
Аналитика получает события сборки заказов с трёх складов и сливает их в один поток через merge.
Отметьте строки с ошибками и ответьте, чем закончится запуск.
В работе: Поток событий складов для дашборда сборки заказов.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 1 вопрос про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: на данных Ozon: склады и заказы. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
package mainimport "fmt"type Event struct {Warehouse stringOrderID int64}func feed(name string, n int) <-chan Event {ch := make(chan Event)go func() {defer close(ch)for i := 1; i <= n; i++ {ch <- Event{Warehouse: name, OrderID: int64(i)}}}()return ch}// merge сливает события складов в один поток для аналитики.func merge(sources ...<-chan Event) <-chan Event {out := make(chan Event)for _, src := range sources {go func() {defer close(out)for e := range src {out <- e}}()}return out}func main() {events := merge(feed("Хоругвино", 3), feed("Пушкино", 2), feed("Казань", 4))for {e := <-eventsfmt.Println(e.Warehouse, e.OrderID)}}