Senior
/** * N kanallarını tek bir kanala birleştir * * N adet kanal verildi, bunlar chan int tipinde. Tüm verileri birleştirecek bir fonksiyon yazılmalı **/ // 1. N kanallarını tek bir kanala birleştirmek için bir fonksiyon uygulamak gerekiyor func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. a, b, c kanallarını değerlerle doldurun // ...
sobes.tech yapay zeka
AI'dan gelen yanıt
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
}
// Kanal doldurma örneği 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)
}
}
// Bu örnekte, joinChannels fonksiyonu her giriş kanalına bir goroutine başlatır, ondan okur ve verileri ortak bir kanala mergedCh gönderir. Tüm orijinal kanallar kapandıktan ve işlendiğinde, ortak kanal kapatılır. Bu, birkaç veri akışını tek bir kanalda birleştirmeye olanak tanır.