Sobes.tech
Senior

/** * Combinar N canales en uno * * Se dan n canales de tipo chan int. Se debe escribir una función que fusione todos los datos **/ // 1. Es necesario implementar una función para fusionar N canales en uno func joinChannels(chs ...<-chan int) <-chan int { mergedCh := make(chan int) // ... return mergedCh } // 2. Escribir el llenado de los canales a, b, c con valores // ...

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. Μετά το κλείσιμο και την επεξεργασία όλων των αρχικών καναλιών, το κοινό κανάλι κλείνει. Αυτό επιτρέπει τον συνδυασμό πολλαπλών ροών δεδομένων σε ένα κανάλι για εύκολη ανάγνωση.