Sobes.tech
Junior — Middle

Kun je tegelijkertijd waarden uit een kanaal ontvangen in meerdere goroutines?

sobes.tech AI

Antwoord van AI

Ja, meerdere goroutines kunnen tegelijkertijd waarden uit één kanaal in Go ontvangen. Kanalen in Go ondersteunen meerdere lees- en schrijfbewerkingen, waardoor meerdere goroutines gelijktijdig uit hetzelfde kanaal kunnen lezen.

Het is echter belangrijk op te merken dat als meerdere goroutines uit hetzelfde kanaal lezen, elke waarde slechts door één van hen wordt ontvangen — de waarden worden niet gedupliceerd. Dit is handig voor het verdelen van werk tussen goroutines (worker pool).

Voorbeeld:

ch := make(chan int)

// Start meerdere goroutines die uit het kanaal lezen
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d ontving %d\n", id, val)
        }
    }(i)
}

// Stuur gegevens naar het kanaal
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

In dit voorbeeld worden de waarden uit het kanaal verdeeld over de drie goroutines.