Sobes.tech
Middle+

Kto powinien zamknąć kanał?

sobes.tech AI

Odpowiedź od AI

Ten, kto utworzył kanał, powinien go zamknąć i nie zamierza już wysyłać do niego danych. Jest to ważne, aby uniknąć paniki podczas próby wysłania danych do zamkniętego kanału oraz aby odbiorcy mogli poprawnie określić koniec strumienia danych.

Główne zasady:

  • Nadawca zamyka kanał, gdy nie będzie już wysyłał wartości.
  • Odbiorcy nie powinni zamykać kanału.
  • Zamknięcie kanału sygnalizuje odbiorcom, że nie będzie już nowych danych.

Przykład:

func producent(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch) // Zamykamy kanał po wysłaniu wszystkich danych
}

func konsument(ch <-chan int) {
    for val := range ch {
        fmt.Println(val)
    }
    // Gdy kanał jest zamknięty, pętla kończy się
}

func main() {
    ch := make(chan int)
    go producent(ch)
    konsument(ch)
}