Назад к вопросам
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
}
Такой подход позволяет эффективно агрегировать данные из нескольких источников, упрощая обработку и синхронизацию.