Sobes.tech
Senior

/** * N ալիքների միացում մեկում * * Ներկայացված են n ալիքներ, որոնք տիպով chan int են: Պետք է գրել ֆունկցիա, որը կլուծի բոլոր տվյալները **/ // 1. Պետք է իրականացնել ֆունկցիա, որը միացնում է N ալիքները մեկում func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. Լրացրեք ալիքները a, b, c արժեքներով // ...

sobes.tech AI

Պատասխան 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

}

// Օրինակ լրացման ալիքներ 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)
}

} // Այս օրինակով, joinChannels ֆունկցիան սկսում է goroutine յուրաքանչյուր մուտքային ալիքին, կարդում է նրանից և ուղարկում տվյալները ընդհանուր ալիք mergedCh-ին: Երբ բոլոր սկզբնական ալիքները փակվեն և մշակվեն, ընդհանուր ալիքն էլ փակվում է: Սա թույլ է տալիս միացնել մի քանի տվյալների հոսքեր մեկ ալիքով հեշտ ընթերցման համար։