Sobes.tech
Назад к вопросам
Senior
4

Расскажи про паттерн Fan-In, для чего он нужен?

Компании, где спрашивали
sber tech

Ответ от нейросети

sobes.tech AI

Паттерн Fan-In в Go используется для объединения нескольких каналов в один. Это полезно, когда нужно собрать данные из разных источников (горутин) и обработать их в одном месте. По сути, несколько входящих каналов «сходятся» в один выходной канал.

Пример реализации Fan-In:

type Data struct { /* ... */ }

func fanIn(channels ...<-chan Data) <-chan Data {
    out := make(chan Data)
    var wg sync.WaitGroup
    wg.Add(len(channels))

    for _, ch := range channels {
        go func(c <-chan Data) {
            defer wg.Done()
            for v := range c {
                out <- v
            }
        }(ch)
    }

    go func() {
        wg.Wait()
        close(out)
    }()

    return out
}

Такой подход позволяет эффективно агрегировать данные из нескольких источников, упрощая обработку и синхронизацию.