Sobes.tech
Senior

Cosa succede leggendo da un canale chiuso in Go?

sobes.tech AI

Risposta dell'AI

Leggendo da un canale chiuso in Go, succede quanto segue:

  • Se ci sono dati nel canale, verranno letti normalmente.
  • Se il canale è chiuso e non ci sono dati, l'operazione di lettura restituirà il valore zero del tipo del canale e false nel secondo valore restituito (se si utilizza la forma con due valori di ritorno).

Esempio:

ch := make(chan int)
close(ch)

v, ok := <-ch
fmt.Println(v, ok) // Stamperà: 0 false

Questo permette di determinare che il canale è chiuso e non ci saranno più dati. Quando si legge da un canale chiuso senza dati, la goroutine non si blocca e riceve immediatamente il valore zero.

Se si legge da un canale chiuso senza verificare il secondo valore, si possono ottenere dati nulli, il che è importante considerare nella logica di elaborazione.