Senior
/** * N Kanäle zu einem zusammenführen * * Es sind n Kanäle vom Typ chan int gegeben. Es soll eine Funktion geschrieben werden, die alle Daten zusammenführt **/ // 1. Es ist erforderlich, eine Funktion zu implementieren, um N Kanäle zu einem zu verschmelzen func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. Schreiben Sie die Befüllung der Kanäle a, b, c mit Werten // ...
sobes.tech KI
Antwort von AI
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
}
// Beispiel zum Befüllen der Kanäle 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)
}
}
// In diesem Beispiel startet die Funktion joinChannels für jeden Eingangskanal eine Goroutine, liest daraus und sendet die Daten in einen gemeinsamen Kanal mergedCh. Nachdem alle ursprünglichen Kanäle geschlossen und verarbeitet wurden, wird der gemeinsame Kanal geschlossen. Dies ermöglicht die Zusammenführung mehrerer Datenströme in einen Kanal für eine einfache Lektüre.