Sobes.tech
Senior

/** * Apvienot N kanālus vienā * * Dot n kanāli ar tipu chan int. Jāuzraksta funkcija, kas apvieno visus datus **/ // 1. Ir nepieciešams īstenot funkciju, kas apvieno N kanālus vienā func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. Aizpildiet kanālus a, b, c ar vērtībām // ...

sobes.tech AI

Atbilde no 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

}

// Piemērs, kā aizpildīt kanālus 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)
}

} // Šajā piemērā funkcija joinChannels sāk katram ievades kanālam gorutīnu, lasa no tā un sūta datus kopējā kanālā mergedCh. Pēc tam, kad visi sākotnējie kanāli ir aizvērti un apstrādāti, kopējais kanāls tiek aizvērts. Tas ļauj apvienot vairākus datu plūsmas vienā kanālā ērtai lasīšanai.