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