Senior
// 2 func merge(chans ...chan int) <-chan int { panic("not implemented") } func main() { a,b,c := make(chan int), make(chan int), make(chan int) out := merge(a,b,c) go func(){ for v := range out { println(v) } }() a <- 1 a <- 2 a <- 3 b <- 4 c <- 5 close(c) a <- 6 } Merge fonksiyonunu, birden fazla tamsayı kanalını alan ve tüm giriş kanallarındaki değerleri birleştiren tek bir kanal döndüren şekilde uygulayın. Birleştirilmiş kanal, tüm giriş kanalları kapandığında kapanmalıdır.
sobes.tech yapay zeka
AI'dan gelen yanıt
merge fonksiyonu, birkaç chan int kanalı kabul etmeli ve tüm giriş kanallarındaki değerlerin gönderileceği tek bir kanal döndürmelidir. Tüm giriş kanalları kapatıldığında, çıkış kanalı da kapanmalıdır.
Uygulama genellikle sync.WaitGroup kullanımıyla tüm kanalların kapanışını izlemeye ve her kanaldan okuma yapmak için goroutine'ler başlatmaya dayanır.
Uygulama örneği:
func merge(chans ...chan int) <-chan int {
var wg sync.WaitGroup
out := make(chan int)
// Bir kanaldan diğerine değerleri kopyalamak için fonksiyon
output := func(c chan int) {
defer wg.Done()
for v := range c {
out <- v
}
}
wg.Add(len(chans))
for _, c := range chans {
go output(c)
}
// Tüm goroutine'ler tamamlandıktan sonra out'u kapat
go func() {
wg.Wait()
close(out)
}()
return out
}
Bu yaklaşım, giriş kanallarındaki tüm değerlerin çıkış kanalına ulaşmasını sağlar ve tüm giriş kanalları kapandıktan sonra çıkış kanalını kapatır.