Middle
Wat is een kanaal in Go? Welke soorten kanalen zijn er? Hoe verschillen gebufferde van niet-gebufferde kanalen?
sobes.tech AI
Antwoord van AI
Een kanaal in Go is een datatype dat wordt gebruikt om waarden tussen goroutines over te dragen, waarbij synchronisatie en gegevensuitwisseling worden verzekerd.
Soorten kanalen:
- Onbufferde kanalen — hebben geen interne buffer, en verzending wordt geblokkeerd totdat de ontvanger de waarde leest.
- Gebufferde kanalen — hebben een interne buffer van vaste grootte, en verzending wordt alleen geblokkeerd als de buffer vol is.
Verschillen:
- Bij onbufferde kanalen moeten zender en ontvanger gelijktijdig klaar zijn om te verzenden/ontvangen, wat strikte synchronisatie garandeert.
- Bij gebufferde kanalen kan de zender meerdere waarden in de buffer plaatsen zonder op de ontvanger te wachten, totdat de buffer vol is.
Voorbeeld van het maken en gebruiken van een gebufferd kanaal:
ch := make(chan int, 2) // buffer voor 2 elementen
ch <- 1
ch <- 2
// ch <- 3 // wordt geblokkeerd totdat er ruimte is
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2