Junior — Middle
Is het toegestaan om berichten naar één kanaal tegelijk te sturen met meerdere goroutines?
sobes.tech AI
Antwoord van AI
Ja, in Go is het toegestaan om berichten tegelijk vanuit meerdere goroutines naar een kanaal te sturen. Kanalen in Go zijn thread-safe en zorgen voor synchronisatie tussen goroutines.
Het is echter belangrijk om te onthouden:
- Als meerdere goroutines naar dezelfde kanaal schrijven en niemand leest, leidt dit tot blokkering.
- Als het kanaal gebufferd is, worden schrijfbewerkingen alleen geblokkeerd wanneer de buffer vol is.
- Het is belangrijk om het sluiten van het kanaal zorgvuldig te beheren: alleen de zender mag het sluiten, en alleen wanneer zeker is dat er geen verdere schrijfsels zullen zijn.
Voorbeeld:
ch := make(chan int)
// Start meerdere goroutines die gegevens naar het kanaal sturen
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Lezen uit het kanaal
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
Op deze manier is gelijktijdig sturen naar een kanaal vanuit meerdere goroutines een standaardpraktijk in Go.