Senior
/** * Fusionner N canaux en un seul * * On donne n canaux de type chan int. Il faut écrire une fonction qui fusionne toutes les données **/ // 1. Il faut implémenter une fonction pour fusionner N canaux en un seul func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. Écrire le remplissage des canaux a, b, c avec des valeurs // ...
sobes.tech IA
Réponse de l'IA
go func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int)
var wg sync.WaitGroup
wg.Add(len(chs))
for _, ch := range chs {
go func(c <-chan int) {
defer wg.Done()
for val := range c {
mergedCh <- val
}
}(ch)
}
go func() {
wg.Wait()
close(mergedCh)
}()
return mergedCh
}
// Exemple de remplissage des canaux a, b, c func main() { a := make(chan int, 3) b := make(chan int, 3) c := make(chan int, 3)
a <- 1
a <- 2
a <- 3
close(a)
b <- 4
b <- 5
b <- 6
close(b)
c <- 7
c <- 8
c <- 9
close(c)
merged := joinChannels(a, b, c)
for val := range merged {
fmt.Println(val)
}
}
// Dans cet exemple, la fonction joinChannels lance une goroutine pour chaque canal d'entrée, lisant à partir de celui-ci et envoyant les données dans un canal commun mergedCh. Après que tous les canaux d'origine soient fermés et traités, le canal commun est fermé. Cela permet de combiner plusieurs flux de données en un seul canal pour une lecture pratique.