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-ին: Երբ բոլոր սկզբնական ալիքները փակվեն և մշակվեն, ընդհանուր ալիքն էլ փակվում է: Սա թույլ է տալիս միացնել մի քանի տվյալների հոսքեր մեկ ալիքով հեշտ ընթերցման համար։