Senior
/** * N kanallarni bitta qilish * * N ta kanal berilgan, ular chan int turida. Barcha ma'lumotlarni birlashtiradigan funktsiya yozilishi kerak **/ // 1. N kanallarni bitta qilish uchun funktsiya amalga oshirilishi kerak func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. a, b, c kanallarini qiymatlar bilan to'ldiring // ...
sobes.tech AI
AIdan javob
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 жўнатади. Барча манба каналлар ёпилгандан кейин ва улар ишлангандан кейин, умумий канал ёпилади. Бу бир неча маълумот тўқималарини бир каналга бирлаштиришга имкон беради, ўқиш учун қулай.