Sobes.tech
Senior

/** * Combineer N kanalen tot één * * Er worden n kanalen gegeven van het type chan int. Er moet een functie worden geschreven die alle gegevens samenvoegt **/ // 1. Het is nodig om een functie te implementeren voor het samenvoegen van N kanalen tot één func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. Vul de kanalen a, b, c met waarden // ...

sobes.tech AI

Antwoord van 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

}

// Voorbeeld van het vullen van kanalen 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 dit voorbeeld start de functie joinChannels een goroutine voor elk invoerkanaal, leest ervan en stuurt de gegevens naar een gemeenschappelijk kanaal mergedCh. Nadat alle oorspronkelijke kanalen gesloten en verwerkt zijn, wordt het gemeenschappelijke kanaal gesloten. Dit maakt het mogelijk om meerdere datastromen samen te voegen in één kanaal voor gemakkelijke lezing.