Middle+
Kto powinien zamknąć kanał - pisarz czy czytelnik?
sobes.tech AI
Odpowiedź od AI
W Go, kanał powinien być zamknięty przez nadawcę (sender), a nie przez odbiorcę (receiver). Zamknięcie kanału sygnalizuje, że nie będą już wysyłane żadne wartości, a czytelnicy mogą poprawnie zakończyć odczyt, wykrywając zamknięty kanał.
Jeśli czytelnik zamknie kanał, a nadawca będzie kontynuował próby wysyłania, spowoduje to panic (panic). Dlatego odpowiedzialność za zamknięcie kanału spoczywa na stronie, która go pisze.
Przykład:
ch := make(chan int)
func() {
defer close(ch) // nadawca zamyka kanał
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // czyta do zamknięcia
}