Sobes.tech
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
}