Sobes.tech
Middle+

Chi dovrebbe chiudere il canale - lo scrittore o il lettore?

sobes.tech AI

Risposta dell'AI

In Go, il canale deve essere chiuso dal mittente (sender), non dal destinatario (receiver). La chiusura del canale segnala che non verranno inviati più valori, e i lettori possono terminare correttamente la lettura rilevando il canale chiuso.

Se il lettore chiude il canale e il mittente continua a tentare di inviare, ciò provocherà un panic. Pertanto, la responsabilità di chiudere il canale ricade sulla parte che lo scrive.

Esempio:

ch := make(chan int)
func() {
    defer close(ch) // il mittente chiude il canale
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // legge fino alla chiusura
}