Sobes.tech
Junior — Middle

Czy można odbierać wartości z jednego kanału w wielu goroutines jednocześnie?

sobes.tech AI

Odpowiedź od AI

Tak, kilka gorutyn może jednocześnie pobierać wartości z tego samego kanału w Go. Kanały w Go obsługują wielokrotne odczyty i zapisy, co pozwala wielu gorutynom na równoczesne czytanie z tego samego kanału.

Jednak ważne jest, aby pamiętać, że jeśli kilka gorutyn czyta z tego samego kanału, każda wartość zostanie odebrana tylko przez jedną z nich — wartości nie są duplikowane. Jest to przydatne do rozdzielania pracy między gorutynami (pula pracowników).

Przykład:

ch := make(chan int)

// Uruchamiamy kilka gorutyn, które czytają z kanału
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d otrzymała %d\n", id, val)
        }
    }(i)
}

// Wysyłamy dane do kanału
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

W tym przykładzie wartości z kanału są rozdzielane między trzy gorutyny.