Sobes.tech
Middle+

Cine trebuie să închidă canalul - scriitorul sau cititorul?

sobes.tech AI

Răspuns de la AI

În Go, canalul trebuie închis de către expeditor (sender), nu de către receptor (receiver). Închiderea canalului semnalează că nu vor mai fi trimise valori, iar cititorii pot termina corect citirea detectând canalul închis.

Dacă cititorul închide canalul și expeditorul continuă să încerce să trimită, va apărea o panică (panic). Prin urmare, responsabilitatea pentru închiderea canalului revine părții care îl scrie.

Exemplu:

ch := make(chan int)
func() {
    defer close(ch) // expeditorul închide canalul
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // citește până la închidere
}