Sobes.tech
Senior

Lequel des fragments de code suivants contient une erreur ou un problème potentiel lié au travail avec des canaux? Option 1 package main func main() { ch := make(chan int) ch <- 1 } Option 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Option 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Option 4 package main func main() { ch := make(chan int) close(ch) <-ch } Option 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

sobes.tech IA

Réponse de l'IA

L'erreur se trouve dans l'Option 1 :

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

Ici, un canal non tamponné est créé avec ch := make(chan int). L'envoi dans ce canal ch <- 1 se bloque jusqu'à ce que quelqu'un lise du canal. Dans ce code, il n'y a pas de récepteur, donc le programme se bloquera indéfiniment (deadlock).

L'option 2 est correcte, car le canal est tamponné avec une taille de 1, et l'envoi ne se bloque pas si le tampon n'est pas plein.

L'option 3 est également correcte : l'envoi et la réception sont équilibrés.

L'option 4 est correcte : on peut lire d'un canal fermé, la lecture renverra la valeur zéro et ne se bloquera pas.

L'option 5 est correcte : tampon de 3, une valeur est envoyée, le tampon n'est pas plein.

En résumé, le problème se trouve uniquement dans l'Option 1 — blocage lors de l'envoi dans un canal non tamponné sans récepteur.