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 функциясы ар бир кирүү канал үчүн горутин баштайт, андан окуйт жана маалыматтарды жалпы каналга mergedCh жиберет. Бардык баштапкы каналдар жабылып жана иштетилгич болсо, жалпы канал жабылат. Бул көптөгөн маалымат агымдарын бир каналга бириктирүүгө мүмкүндүк берет, оңой окуу үчүн.