Middle+
Wie moet het kanaal sluiten - de schrijver of de lezer?
sobes.tech AI
Antwoord van AI
In Go moet het kanaal door de zender (sender), niet door de ontvanger (receiver), worden gesloten. Het sluiten van een kanaal geeft aan dat er geen waarden meer worden verzonden, en lezers kunnen correct stoppen met lezen door te detecteren dat het kanaal gesloten is.
Als de lezer het kanaal sluit en de zender blijft proberen te verzenden, leidt dit tot een panic. Daarom ligt de verantwoordelijkheid voor het sluiten van het kanaal bij degene die het schrijft.
Voorbeeld:
ch := make(chan int)
func() {
defer close(ch) // de zender sluit het kanaal
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // leest tot het kanaal wordt gesloten
}