Sobes.tech
Senior

Quale dei seguenti frammenti di codice contiene un errore o un potenziale problema legato al lavoro con i canali? Opzione 1 package main func main() { ch := make(chan int) ch <- 1 } Opzione 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Opzione 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Opzione 4 package main func main() { ch := make(chan int) close(ch) <-ch } Opzione 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech AI

Risposta dell'AI

L'errore si trova nell'Opzione 1:

package main
func main() {
    ch := make(chan int)
    ch <- 1
}

Qui viene creato un canale non bufferizzato ch := make(chan int). L'invio in questo canale ch <- 1 si blocca finché qualcuno non legge dal canale. In questo codice, non c'è nessun ricevitore, quindi il programma si bloccherà per sempre (deadlock).

L'opzione 2 è corretta, poiché il canale è con buffer di dimensione 1, e l'invio non si blocca se il buffer non è pieno.

Anche l'opzione 3 è corretta: invio e ricezione sono bilanciati.

L'opzione 4 è corretta: si può leggere da un canale chiuso, la lettura restituirà il valore zero e non si bloccherà.

L'opzione 5 è corretta: buffer di 3, viene inviato un valore, il buffer non è pieno.

In sintesi, il problema si trova solo nell'Opzione 1 — blocco durante l'invio in un canale non bufferizzato senza ricevitore.